您的位置:首页 > 理论基础 > 计算机网络

Java网络编程——Socket与ServerSocket阻塞通信

2013-12-03 20:41 585 查看
java程序可以通过ServerSocket和Socket两个类来实现TCP服务器、TCP客户端

具体demo如下:

client.javaimport java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
public static void main(String[]args) throws IOException{
Socket socket=new Socket("127.0.0.1",30000);
//将Socket对应的输出流包装成BufferedReader
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=br.readLine();
System.out.println("来自服务器的数据:"+line);
//关闭输入流、socket
br.close();
socket.close();
}
}service.java
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
public static void main(String[]args) throws IOException{
//创建一个ServerSocket,用于监听客户端Socket的连接请求
ServerSocket ss=new ServerSocket(30000);
//采用循环不断接受来自客户端的请求
while(true){
//每当接受到客户端Socket的请求,服务器端也对应产生一个Socket
Socket s=ss.accept();
//将Socket对应的输出流包装成PrintStream
PrintStream ps=new PrintStream(s.getOutputStream());
ps.println("您好,您收到了服务器的新年祝福");
//关闭输出流,关闭Socket
ps.close();
s.close();
}
}
}


    这个简单的小demo就实现了客户端与服务端的通信。但是由于此种方式是基于阻塞式API的,即当程序执行输入、输出操作后,在这些操作返回之前会一直阻塞该线程,所以服务器必须为每个客户端都提供一条独立线程进行处理,当服务器需要同时处理大量客户端时,这种做法会导致性能的下降。java提供的NIO API能够有效的解决这个问题,可以让服务器使用一个或者有限几个线程来同时处理连接到服务器上的所有客户端,以开发高性能的网络服务器。也就是Selector的应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息