java.net 包中提供了两种常见的网络协议的支持:
- TCP:Transmission Control Protocol 传输控制协议,面向连接的,是一种可靠的、基于字节流的传输层通信协议
- UDP:User Datagram Protocol 用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
Socket
Socket使用TCP提供了两台计算机之间的通信机制。
Socket建立tcp的连接过程如下:
- 服务器实例化一个 ServerSocket 对象
- 服务器调用 ServerSocket 类的 accept() 方法
- 一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接
- Socket 类的构造函数试图将客户端连接到指定的服务器和端口号
- 在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket
由于tcp是双向协议,因此服务器和客户端可以同时发送数据。
ServerSocket
ServerSocket是服务器端建立用于监听客户端的类。
通过绑定接口,实例化ServerSocket,并调用accept()方法,实现对客户端的监听。
Socket
Socket 类代表客户端和服务器都用来互相沟通的套接字。
客户端通过实例化来获取一个 Socket 对象 ,而服务器则通过 accept()方法的返回值获得一个 Socket 对象。
实例:
//server端:
ServerSocket ss = null;
try{
ss = new ServerSocket(10002);
while(true){
Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println("from client:"+br.readLine());
}
} catch(IOException e){
e.printStackTrace();
}
//client端:
Socket s = null;
try{
s = new Socket("127.0.0.1", 10002);
PrintWriter ps = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())));
ps.println("hello server");
ps.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}