欢迎访问宙启技术站
智能推送

Java中如何使用Socket编写TCP/UDP服务器和客户端程序

发布时间:2023-06-13 04:36:14

Socket是Java中用于网络通信的模块,它提供了对TCP和UDP协议的支持,使得Java程序可以实现网络通信。在本文中,我将介绍如何使用Socket编写TCP/UDP服务器和客户端程序。

一、TCP服务器和客户端程序

1. TCP服务器程序

TCP服务器程序可以通过以下步骤实现:

1. 创建ServerSocket,指定需要监听的端口号;

2. 通过ServerSocket的accept()方法监听客户端的连接请求,该方法会一直阻塞直到有客户端连接;

3. 接受客户端连接后,通过返回的Socket对象与客户端进行数据传输。

下面是一个简单的TCP服务器程序示例:

import java.net.*;
import java.io.*;

public class TCPServer {
   public static void main(String[] args) throws IOException {
   
      // 创建ServerSocket并指定需要监听的端口号
      int port = 8888;
      ServerSocket serverSocket = new ServerSocket(port);
   
      System.out.println("等待连接......");
   
      // 监听客户端的连接请求并返回一个Socket对象
      Socket clientSocket = serverSocket.accept();
   
      // 获取输入流,接收客户端传来的数据
      BufferedReader in = new BufferedReader(
         new InputStreamReader(clientSocket.getInputStream()));
   
      // 获取输出流,向客户端发送数据
      PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
   
      // 读取客户端传来的数据,做出响应
      String inputLine;
      while ((inputLine = in.readLine()) != null) {
         System.out.println("客户端传来数据:" + inputLine);
         out.println(inputLine);
      }
   }
}

2. TCP客户端程序

TCP客户端程序可以通过以下步骤实现:

1. 创建Socket对象,指定需要连接的服务器端IP地址和端口号;

2. 通过Socket对象的输入输出流进行数据传输。

下面是一个简单的TCP客户端程序示例:

import java.net.*;
import java.io.*;

public class TCPClient {
   public static void main(String[] args) throws IOException {
   
      // 指定需要连接的服务器端IP地址和端口号
      String serverIP = "127.0.0.1";
      int port = 8888;
      Socket socket = new Socket(serverIP, port);
   
      // 获取输出流,向服务端发送数据
      PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
      out.println("Hello, TCP Server!");
   
      // 获取输入流,接收服务端传来的数据
      BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      String response = in.readLine();
      System.out.println("服务端响应数据:" + response);
   }
}

二、UDP服务器和客户端程序

1. UDP服务器程序

UDP服务器程序可以通过以下步骤实现:

1. 创建DatagramSocket,指定需要监听的端口号;

2. 创建DatagramPacket用于接收客户端传来的数据;

3. 接收客户端传来的数据后,通过DatagramPacket的地址信息将数据发送回给客户端。

下面是一个简单的UDP服务器程序示例:

import java.net.*;
import java.io.*;

public class UDPServer {
   public static void main(String[] args) throws IOException {
   
      // 创建DatagramSocket并指定需要监听的端口号
      int port = 8888;
      DatagramSocket datagramSocket = new DatagramSocket(port);
   
      // 创建DatagramPacket用于接收客户端传来的数据
      byte[] buffer = new byte[1024];
      DatagramPacket receivePacket = new DatagramPacket(buffer, buffer.length);
   
      System.out.println("等待连接......");
   
      // 接收客户端传来的数据
      datagramSocket.receive(receivePacket);
   
      // 将客户端传来的数据通过DatagramPacket的地址信息发送回客户端
      byte[] data = receivePacket.getData();
      String response = new String(data, 0, receivePacket.getLength());
      InetAddress address = receivePacket.getAddress();
      int port = receivePacket.getPort();
      DatagramPacket sendPacket = new DatagramPacket(data, data.length, address, port);
      datagramSocket.send(sendPacket);
      System.out.println("服务端响应数据:" + response);
   }
}

2. UDP客户端程序

UDP客户端程序可以通过以下步骤实现:

1. 创建DatagramSocket对象;

2. 创建DatagramPacket用于向服务器端发送数据;

3. 通过DatagramPacket的地址信息接收服务器端传来的数据。

下面是一个简单的UDP客户端程序示例:

import java.net.*;
import java.io.*;

public class UDPClient {
   public static void main(String[] args) throws IOException {
   
      // 创建DatagramPacket用于向服务器端发送数据
      byte[] buffer = "Hello, UDP Server!".getBytes();
      InetAddress address = InetAddress.getByName("127.0.0.1");
      int port = 8888;
      DatagramPacket sendPacket = new DatagramPacket(buffer, buffer.length, address, port);
   
      // 创建DatagramSocket对象
      DatagramSocket datagramSocket = new DatagramSocket();
   
      // 向服务器端发送数据
      datagramSocket.send(sendPacket);
   
      // 接收服务器端传来的数据
      byte[] responseBuffer = new byte[1024];
      DatagramPacket responsePacket = new DatagramPacket(responseBuffer, responseBuffer.length);
      datagramSocket.receive(responsePacket);
      String response = new String(responseBuffer, 0, responsePacket.getLength());
      System.out.println("服务端响应数据:" + response);
   }
}

三、总结

本文介绍了如何使用Java中的Socket模块编写TCP/UDP服务器和客户端程序。无论是TCP还是UDP的通信,都需要创建Socket对象和相应的数据传输流,并且在服务器端需要监听客户端的连接请求。对于初学者来说,需要注意端口号的设置和数据传输的格式。