读书人

Java Socket 初始

发布时间: 2012-09-19 13:43:54 作者: rapoo

Java Socket 初步
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。

服务器:

使用ServerSocket监听指定的端口,等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端:

使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。


0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。


简单的Client/Server示例:

服务器:

Java Socket 初始

上边的代码只是实现一个客户端访问服务器,如果要多个客户同时访问一个服务器,那么服务端的代码就要修改了:

public class MyServer extends Thread{Socket client;public MyServer(Socket c){this.client=c;}public void run() {try{BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream()));PrintWriter os=new PrintWriter(client.getOutputStream());BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));while(true){String s=is.readLine();System.out.println("Client : "+s);//在标准输出上打印从Client读入的字符串String str=sin.readLine();//从系统标准输入读入一字符串os.println(str);os.flush();//刷新输出流,使Client马上收到该字符串if(str.equals("end")){break;}}is.close();os.close();client.close();}catch(Exception e){e.printStackTrace();}}public static void main(String[] args) throws Exception{ServerSocket server=new ServerSocket(5469);//创建一个ServerSocket在端口5469监听客户请求while(true){MyServer s=new MyServer(server.accept());//使用accept()阻塞等待客户请求s.start();}}}


读书人网 >编程

热点推荐