在Java中,提供了两个类用于实现TCP通信程序:
1、客户端:Java.net.Socket类表示。创建Socket对象,向服务端发送连接请求,服务端响应请求,两者建立连接开始通信。
2、服务端:java.net.ServerSocket类表示。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。
Socket类
socket类:该类实现客户端套接字,套接字指的使两台设备之间通讯的端点。
构造方法
public Socket(String host, int port):创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null,则相当于指定地址为回送地址。(注意:回送地址(127.x.x.x)是本机回送地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输)
举例,代码如下:
Socket client = new Socket("127.0.0.1",6666); //连接本地端口为6666的服务器
对应的Server
ServerSocket serverSocket = new ServerSocket(6666);
同时我们要记住,ServerSocket本身是没有获得输入流和输出流的方法的,所以都是通过accpet方法监听客户端获得socket,然后再通过socket的成员方法获得输入流和输入流,完成输入输出操作.
客户端
/*TCP通信的客户端:向服务器发送连接请求,给服务器构造方法:Socket(String host,int port)成员方法:OutputStream getOutputStream() 返回此套接字的输出流InputStream getInputStream() 返回此套接字的输入流void close() 关闭此套接字*/public class TCPClient {public static void main(String[] args) throws IOException {//连接端口为8888的本地服务器Socket socket = new Socket("127.0.0.1",8888);//使用成员方法获得此套接字的输出流,向服务端发送信息OutputStream outputStream = socket.getOutputStream();outputStream.write("你好服务器".getBytes(StandardCharsets.UTF_8));//使用成员方法获得此套接字的输入流,得到服务端发送的信息并打印InputStream inputStream = socket.getInputStream();byte[] bytes = new byte[1024];int len = inputStream.read(bytes);System.out.println(new String(bytes,0,len));//关闭socketsocket.close();}}
服务端
public class TCPServer {public static void main(String[] args) throws IOException {//创建ServerSocket,端口号设置为8888ServerSocket serverSocket = new ServerSocket(8888);//监听SocketSocket socket = serverSocket.accept();//借用socket的InputStream,输出客户端发送的信息InputStream inputStream = socket.getInputStream();byte[] bytes = new byte[1024];int len = inputStream.read(bytes);System.out.println(new java.lang.String(bytes,0,len));//借用socket的OutputStream,返回信息OutputStream outputStream = socket.getOutputStream();outputStream.write("收到谢谢".getBytes(StandardCharsets.UTF_8));//关闭socket与serverSocketsocket.close();serverSocket.close();}}
