关闭

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

标签: java Socket通信java阻塞通信
919人阅读 评论(0) 收藏 举报
分类:

java程序可以通过ServerSocket和Socket两个类来实现TCP服务器、TCP客户端

具体demo如下:

client.java

import 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的应用。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:118431次
    • 积分:2208
    • 等级:
    • 排名:第17661名
    • 原创:103篇
    • 转载:25篇
    • 译文:0篇
    • 评论:5条
    最新评论