网络编程server

下面中一个例子,用到了多线程.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

class ServerOneJabber extends Thread {
	private Socket socket;
	private BufferedReader in;
	private PrintWriter out;

	public ServerOneJabber(Socket s) throws IOException {
		socket = s;
		in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		// auto flush
		out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
				socket.getOutputStream())), true);
		start();
	}

	public void run() {
		try {
			while (true) {
				String str = in.readLine();
				if (str.equals("END"))
					break;
				System.out.println("Ecoh:" + str);
				out.println(str);
			}
			System.out.println("closing");
			;
		} catch (IOException e) {
			// TODO: handle exception
		} finally {
			try {
				socket.close();
			} catch (IOException e2) {
				// TODO: handle exception
			}
		}
	}
}

public class MultiJabberServer {
	static final int PORT = 8080;

	public static void main(String args[]) throws IOException {
		ServerSocket s = new ServerSocket(PORT);
		System.out.println("server start");
		try {
			while (true) {
				Socket socket = s.accept();
				try {
					new ServerOneJabber(socket);
				} catch (IOException e) {
					socket.close();
				}
			}
		} finally {
			s.close();
		}
	}

}

  

然后是客户端

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.security.cert.TrustAnchor;

class JabberClientThread extends Thread{
	private final int PORT =8080 ;

	private Socket socket ;
	private BufferedReader in ;
	private PrintWriter out ;
	private static int counter =0;
	private int id =counter++ ;
	private static int threadcount =0;
	public static int threadCount (){
		return threadcount ;
	}
	public JabberClientThread (InetAddress addr){
		System.out.println("making client id:"+ id) ;
		threadcount ++  ;
		try {
			socket = new Socket(addr,PORT ) ;
		} catch (IOException e) {
			// TODO: handle exception
		}
		try {
			in = new BufferedReader(
					new InputStreamReader(socket.getInputStream()));
			out = new PrintWriter(new BufferedWriter(
					new OutputStreamWriter(
							socket.getOutputStream())) , true) ;
		} catch (Exception e) {
			try {
				socket.close() ;
			} catch (Exception e2) {
				// TODO: handle exception
			}
		}
	}

	public void run (){
		try {
			for (int i =0; i<25;i++){
				out.println("client id:"+i);
				String str = in.readLine() ;
				System.out.println(str) ;
			}
			out.println("END") ;
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			try {
				socket.close() ;
			} catch (IOException e2) {
				threadcount --;//end this thread
			}
		}
	}
}
public class MultiJabberClient {
	static  final int MAX_THREAD =40;
	public static void main (String args [])
	throws IOException, InterruptedException{
		InetAddress addr = InetAddress.getByName(null);
		while (true){
			if (JabberClientThread.threadCount()<MAX_THREAD){
				new JabberClientThread(addr) ;
			}
		}
	}

}

  

时间: 2024-10-12 11:09:14

网络编程server的相关文章

Java Socket网络编程Server端详解

Socket通信:分为客户端和服务端的socket代码. Java SDK提供一些相对简单的Api来完成.对于Java而言.这些Api存在与java.net 这个包里面.因此只要导入这个包就可以开始网络编程了. 网络编程的基本模型就是客户机到服务器模型.简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置.并去建立两者之间的联系,然后完成数据的通讯就可以了.这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端.了解这个简单的模型,就可以

Java - TCP网络编程

Java - TCP网络编程 Server 逻辑思路: 创建ServerSocket(port),然后服务器的socket就启动了 循环中调用accept(),此方法会堵塞程序,直到发现用户请求,返回用户的socket 利用多线程对用户socket进行IO操作 注意:对Scoket/File进行创建.关闭,都需要放try catch中,检测 IOException,所以将网络IO部分整体放入try catch中即可. 1. 字符串操作 输出:PrintWriter out=new PrintWr

Python Socket,How to Create Socket Server? - 网络编程实例

文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programing in Python: Part2: Programing sockets servers. 在所有的通信实例中,都分为Client 和Server. 其中:Client是请求的发起点,Server是使用Socket接收传入的值并且提供返回数据. Server的职能如下: 1>.创建/打开一个so

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

Winsock网络编程笔记(3)----基于UDP的server和client

在上一篇随笔中,对Winsock中基于tcp面向连接的Server和Client通信进行了说明,但是,Winsock中,Server和Client间还可以通过无连接通信,也就是采用UDP协议.. 因此,这一篇随笔也简单的列举基于UDP的Server和Client的实现.. 和基于TCP的实现相比,其主要的不同点包括: ①接收端(简单地说就是服务器)/发送端(简单地说就是客户端)在创建Socket时候,参数要选择SOCK_DGRAM, IPPROTO_UDP: ②接收端不需要调用listen和ac

c网络编程(server服务器端,linux)

多进程 1 #include "network.h" 2 3 void do_service(int peerfd) 4 { 5 char recvbuf[1024] = {0}; 6 int ret; 7 while(1) 8 { 9 ret = readline(peerfd, recvbuf, 1024); 10 if(ret == 0) 11 { 12 close(peerfd); 13 exit(EXIT_SUCCESS); 14 } 15 //模拟数据处理过程 16 pri

python,socket网络编程,最简单的server端和client端代码

python网络编程三要素:网络地址,端口号,协议 知识点:conn代表的是客户端的socket对象. 下面的server.py和client.py小程序,实现了最简单的socket通信功能. #server.py import socket sk = socket.socket() address = ('127.0.0.1',8080) sk.bind(address) sk.listen(3) print('waitting......') conn,addr = sk.accept()

linux网络编程-(socket套接字编程UDP传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

UNIX网络编程卷1 回射客户程序 TCP客户程序设计范式

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 下面我会介绍同一个使用 TCP 协议的客户端程序的几个不同版本,分别是停等版本.select 加阻塞式 I/O 版本. 非阻塞式 I/O 版本.fork 版本.线程化版本.它们都由同一个 main 函数调用来实现同一个功能,即回射程序客户端. 它从标准输入读入一行文本,写到服务器上,读取服务器对该行的回射,并把回射行写到标准输出上. 其中,非阻塞式 I/O 版本是所有版本中执行速度最快的,