以下展示一个最简单的tcp网络编程的案例。创建一个socket server和一个socket client,在client端的控制台输入字符串,能即时地把这些字符串通过tcp协议传输到server端。

服务端

以下是服务端的代码:

  1. public class Server {
  2. private final int port;
  3. public Server(int port) {
  4. this.port = port;
  5. }
  6. public void start() {
  7. // 创建socket server,指定端口号
  8. try (ServerSocket server = new ServerSocket(port)) {
  9. System.out.println("Server started!");
  10. System.out.println("Waiting for a client...");
  11. // 监听指定的端口号,等待客户端来连接
  12. Socket socket = server.accept();
  13. System.out.println("Client accepted!");
  14. // 连接创建后,获取输入流
  15. DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
  16. String line = "";
  17. while (!"over".equals(line)) {
  18. // 读取连接中输入的数据
  19. line = in.readUTF();
  20. System.out.println("Server receive : "+ line);
  21. }
  22. System.out.println("Closing connection...");
  23. // 关闭资源
  24. socket.close();
  25. in.close();
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. public static void main(String[] args) {
  31. Server server = new Server(17121);
  32. server.start();
  33. }
  34. }

客户端

以下是客户端的代码:

  1. public class Client {
  2. public Client(String address, int port) {
  3. try {
  4. // 创建socket连接到指定主机和端口
  5. Socket socket = new Socket(address, port);
  6. System.out.println("Connected!");
  7. // 控制台输入的输入流,用于从控制台输入字符串
  8. DataInputStream input = new DataInputStream(System.in);
  9. // 创建socket的输出流,用于向服务端发送数据
  10. DataOutputStream out = new DataOutputStream(socket.getOutputStream());
  11. String line = "";
  12. while (!"over".equals(line)) {
  13. // 从控制台读取一行字符串
  14. line = input.readLine();
  15. // 将读取的字符串写入socket
  16. out.writeUTF(line);
  17. }
  18. // 关闭资源
  19. input.close();
  20. out.close();
  21. socket.close();
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. public static void main(String[] args) {
  27. Client client = new Client("127.0.0.1", 17121);
  28. }

运行

先启动服务端,然后启动客户端,在客户端的终端控制台中输入字符串,按回车,服务端能够即时收到客户端发送过来的字符串。
其中的过程是在客户端和服务端之间建立了一条tcp连接,通过tcp连接将客户端发送的数据传输到了服务端。
以下是客户端输出:

  1. Connected!
  2. hello server
  3. i am client
  4. ok bye bye
  5. over

然后再来看服务端的输出:

  1. Server started!
  2. Waiting for a client...
  3. Client accepted!
  4. Server receive : hello server
  5. Server receive : i am client
  6. Server receive : ok bye bye
  7. Server receive : over
  8. Closing connection...