TCP套接字
- Java为TCP协议提供了两个类:Socket类和ServerSocket类。
Socket类:客户端套接字类。实现客户端向服务器发送数据、接收服务器数据等功能;实现服务器端向客户端发送数据、接收客户端数据等功能。
ServerSocket类:服务器端套接字类。监听服务器指定端口,接收客户端连接请求。 - 一个Socket实例代表了TCP连接的一端。一个TCP连接是一条抽象的双向信息通道,两端分别有地址和端口号确定。在开始通信之前,必须要建立一个TCP连接,这需要先由客户端向服务端发送连接请求。ServerSocket实例则监听连接请求,并为每个请求创建新的Socket实例。也就是说,服务端要同时处理ServerSocket实例和Socket实例。
客户端Socket应用程序所做的工作主要有:
- 与服务器端建立连接(通过IP和端口号确定主机上的程序)
Socket client = new Socket(“localhost”, 9999); - 向服务器端发送数据,接收服务器端数据
向服务器端发送数据:os = client.getOutputStream();
接收服务器端数据:is = client.getInputStream(); - 关闭Socket连接
client.close();
package demoTCP.com.tcptest;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) {
try {
Socket client = new Socket("localhost",9999);
OutputStream os = client.getOutputStream();
InputStream in = client.getInputStream();
String cw = "这是客户端发来的消息";
os.write(cw.getBytes());
byte[] accept = new byte[1024];
int len = 0;
while((len=in.read(accept))!=-1) {
String str = new String(accept, 0, len);
System.out.print(str);
}
os.close();
in.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端所做的主要工作有:
- 监听特定端口
ServerSocket server = new ServerSocket(8888); - 接收客户端连接
Socket client = server.accept(); - 接收客户端请求,向客户端发送响应
接收客户端请求数据:is = client.getInputStream();
向客户端响应数据:os = client.getOutputStream(); - 关闭连接
关闭客户端:client.close();
关闭服务器端:server.close();
package demoTCP.com.tcptest;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(9999);
Socket client = server.accept();
InputStream is = client.getInputStream();
OutputStream os = client.getOutputStream();
byte[] accept = new byte[1024];
int len = 0;
while((len=is.read(accept))!=-1) {
String str = new String(accept,0,len);
System.out.println(str);
}
os.write("这是服务器响应的消息".getBytes());
is.close();
os.close();
client.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}