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

java Tcp通信客户端与服务器端实例

发布时间:2023-05-17 23:19:16

TCP是一种基于连接的协议,可以确保数据的可靠传输。在网络应用中,TCP通信被广泛应用于客户端与服务器端之间的通信。本文将介绍Java编写的TCP通信客户端与服务器端实例,并演示如何通过TCP实现两者之间的通信。

服务器端实现

首先,我们需要编写服务器端代码。服务器端负责监听端口并接受客户端连接。一旦连接建立,服务器端会处理来自客户端的请求,并返回相应的结果。下面是服务器端的代码实现:

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

public class TCPServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);//监听端口号8888
            System.out.println("服务器已启动,等待客户端连接...");
            Socket socket = serverSocket.accept(); //接受客户端的连接
            System.out.println("客户端已连接:" + socket.getInetAddress());
            
            //计算从客户端接收到的数据
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String input = br.readLine();
            int result = Integer.parseInt(input) * 2;
            System.out.println("服务器接收到数据:" + input);
            
            //将计算结果发送给客户端
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            pw.println(result);
            pw.flush();//刷新缓存
            System.out.println("服务器发送数据:" + result);
            
            //关闭连接
            br.close();
            pw.close();
            socket.close();
            serverSocket.close();
            System.out.println("服务器已关闭。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在代码中,我们创建一个ServerSocket对象并将其绑定到端口8888上。然后,我们使用accept()方法等待客户端连接。如果有客户端连接,则accept()方法将返回一个Socket对象,表示与客户端建立的连接。接着,我们通过BufferedReader对象读取客户端发送的数据,这里使用的是readLine()方法。然后,我们计算结果并将结果发送给客户端,这里使用的是PrintWriter对象和println()方法。最后,我们关闭连接。

客户端实现

接下来,我们需要编写TCP通信的客户端代码。客户端会建立与服务器的连接,并向服务器发送数据请求。服务器会处理请求并返回结果给客户端。下面是客户端的代码实现:

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

public class TCPClient {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888); //连接服务器
            System.out.println("已连接服务器:" + socket.getInetAddress());
            
            //向服务器发送数据
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            pw.println(10);
            pw.flush();
            System.out.println("客户端发送数据:" + 10);
            
            //接收服务器返回的数据
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String input = br.readLine();
            System.out.println("客户端接收到数据:" + input);
            
            //关闭连接
            pw.close();
            br.close();
            socket.close();
            System.out.println("客户端已关闭。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在代码中,我们创建一个Socket对象并使用它连接到服务器。这里使用的是localhost作为主机名,表示连接到本地的服务器。然后,我们使用PrintWriter对象发送数据到服务器,这里的数据是10。接着,我们通过BufferedReader对象读取服务器返回的数据,这里使用的是readLine()方法。最后,我们关闭连接。

运行结果

在运行前,需要先启动服务器端的代码,然后再运行客户端的代码。

客户端运行结果如下:

已连接服务器:localhost/127.0.0.1
客户端发送数据:10
客户端接收到数据:20
客户端已关闭。

服务器端运行结果如下:

服务器已启动,等待客户端连接...
客户端已连接:/127.0.0.1
服务器接收到数据:10
服务器发送数据:20
服务器已关闭。

结论

通过以上的实例,我们可以看到TCP协议的应用实例,其中服务器端通过ServerSocket监听端口,然后等待客户端连接。而客户端通过Socket连接服务器,向服务器发送请求并接收服务器的响应。这种通信方式可以确保数据的可靠传输,并且支持双向通信。TCP通信作为一种网络通信协议,在实际的应用中被广泛使用。