在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)是本机回送地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输)

举例,代码如下:

  1. Socket client = new Socket("127.0.0.1",6666); //连接本地端口为6666的服务器

对应的Server

  1. ServerSocket serverSocket = new ServerSocket(6666);

同时我们要记住,ServerSocket本身是没有获得输入流和输出流的方法的,所以都是通过accpet方法监听客户端获得socket,然后再通过socket的成员方法获得输入流和输入流,完成输入输出操作.

客户端

  1. /*
  2. TCP通信的客户端:向服务器发送连接请求,给服务器
  3. 构造方法:
  4. Socket(String host,int port)
  5. 成员方法:
  6. OutputStream getOutputStream() 返回此套接字的输出流
  7. InputStream getInputStream() 返回此套接字的输入流
  8. void close() 关闭此套接字
  9. */
  10. public class TCPClient {
  11. public static void main(String[] args) throws IOException {
  12. //连接端口为8888的本地服务器
  13. Socket socket = new Socket("127.0.0.1",8888);
  14. //使用成员方法获得此套接字的输出流,向服务端发送信息
  15. OutputStream outputStream = socket.getOutputStream();
  16. outputStream.write("你好服务器".getBytes(StandardCharsets.UTF_8));
  17. //使用成员方法获得此套接字的输入流,得到服务端发送的信息并打印
  18. InputStream inputStream = socket.getInputStream();
  19. byte[] bytes = new byte[1024];
  20. int len = inputStream.read(bytes);
  21. System.out.println(new String(bytes,0,len));
  22. //关闭socket
  23. socket.close();
  24. }
  25. }

服务端

  1. public class TCPServer {
  2. public static void main(String[] args) throws IOException {
  3. //创建ServerSocket,端口号设置为8888
  4. ServerSocket serverSocket = new ServerSocket(8888);
  5. //监听Socket
  6. Socket socket = serverSocket.accept();
  7. //借用socket的InputStream,输出客户端发送的信息
  8. InputStream inputStream = socket.getInputStream();
  9. byte[] bytes = new byte[1024];
  10. int len = inputStream.read(bytes);
  11. System.out.println(new java.lang.String(bytes,0,len));
  12. //借用socket的OutputStream,返回信息
  13. OutputStream outputStream = socket.getOutputStream();
  14. outputStream.write("收到谢谢".getBytes(StandardCharsets.UTF_8));
  15. //关闭socket与serverSocket
  16. socket.close();
  17. serverSocket.close();
  18. }
  19. }