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的应用。
具体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的应用。
相关文章推荐
- java网络编程——Socket和ServerSocket,套接字编程——简单聊天室改进
- Java网络编程精解笔记3:ServerSocket详解
- Java网络编程(ServerSocket和Socket)
- Java网络编程,Socket,ServerSocket使用,TCP,UDP的异同
- Java网络编程之Socket与SocketServer
- Java网络编程精解之ServerSocket用法详解一2
- JAVA: Socket和ServerSocket网络编程
- Java网络编程精解之ServerSocket用法详解二1
- Java网络编程——Socket与ServerSocket
- [转] Java网络编程精解之ServerSocket用法详解一
- java网络编程学习笔记(三):ServerSocket详解
- Java网络编程从入门到精通(28):获取ServerSocket信息的方法及FTP原理 推荐
- Java网络编程——Socket与ServerSocket
- java网络编程之TCP/IP ——SocketServer与Socket
- Java网络编程精解之ServerSocket用法详解二
- Java网络编程之NIO(ServerSocketChannel/SocketChannel)-yellowcong
- Java网络编程精解之ServerSocket用法详解二2
- java 网络编程之ServerSocket详解
- Java网络编程精解之ServerSocket用法详解三
- java网络编程serversocket