Logo

郎哥编程

构建TCP客户端

2020-01-10 175

TCP客户端用于连接TCP服务器,并向服务器发送请求,接收服务器返回的数据。客户端的套接字由Socket类创建。

Socket类的主要构造方法说明如下:

Socket(InetAddress address, int port)

该构造方法创建流套接字并将其连接到指定IP地址处的指定端口号。

Socket类的主要方法说明如下:

void   bind(SocketAddress bindpoint)

该方法将将套接字绑定到bindpoint指定的IP地址和端口号。

void   connect(SocketAddress endpoint)

该方法将此套接字连接到指定的IP地址和端口号,IP地址和端口号由endpoint指定。

void   connect(SocketAddress endpoint, int timeout)

该方法将此套接字连接到指定的IP地址和端口号,IP地址和端口号由endpoint指定。参数timeout为连接超时时间。

void   close()

该方法关闭此套接字。

案例1:编写TCP客户端程序。建立TcpClient类,连接前面课程创建的TCP服务,并输出服务器的返回数据到控制台。

在tcp包下新建TcpClient类。代码如下:

package tcp;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
 
/**
 * @ClassName: TcpClient
 * @Description: 网络编程(构建TCP客户端)案例1
 * @author 编程训练营
 * @date
 *
 */
public class TcpClient {
    // 定义一个套接字
    Socket socket;
    // 定义端口号
    int port;
    // 定义IP地址
    String ip;
 
    // 构造方法
    public TcpClient(String ip, int port) {
       this.ip = ip;
       this.port = port;
    }
 
    /**
     * @Title: send @Description: 向TCP服务器发送请求 @param 参数
     *
     * @return void 返回类型 @throws
     */
    public void send() {
       System.out.println("客户端正在连接服务器...");  
       while (true) {
           try {
              // 实例化套接字,指定IP地址和端口号
              // 套接字实例化后,会自动向服务器发送请求
              socket = new Socket(ip, port);
              // 向服务器端发送数据
              PrintStream out = new PrintStream(socket.getOutputStream());
              System.out.print("请输入: \t");
              String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
              out.println(str);
              // 读取服务器端返回的数据
              BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              String ret = input.readLine();
              System.out.println("服务器端返回过来的是: " + ret);
              // 如接收到 "OK" 则断开连接
              if ("OK".equals(ret)) {
                  System.out.println("客户端将关闭连接");
                  break;
              }
 
              out.close();
              input.close();
           } catch (Exception e) {
              System.out.println("客户端异常:" + e.getMessage());
           } finally {
              if (socket != null) {
                  try {
                     socket.close();
                  } catch (IOException e) {
                     socket = null;
                     System.out.println("客户端 finally 异常:" + e.getMessage());
                  }
              }
           }
       }
 
    }
 
}

编写TCP客户端程序的主要步骤如下:

(1)实例化Socket对象,创建套接字。套接字的IP地址需要和服务器的IP地址一致,如果TCP服务器没有指定IP地址,而是采用默认的IP地址,客户端套接字的IP地址可以是本地地址127.0.0.1,端口号必须一致。

(2)应用I/O类向服务器端写入数据,发送请求;

(3)应用I/O类读取服务端返回的数据;

(4)通信完成后,关闭Socket。

在tcp包下新建TcpClientTest测试类。代码如下:

package tcp;
 
/** 
* @ClassName: TcpClientTest 
* @Description: 网络编程(构建TCP客户端)案例1
* @author 编程训练营 
* @date 
* 
*/
 
public class TcpClientTest {
 
    /** 
    * @Title: main 
    * @Description:Java程序入口main方法   
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       // 实例化client对象
       TcpClient  client = new TcpClient("127.0.0.1",9099);
       // 向服务端发送请求
       client.send();
               
    }
 
}

TcpClientTest程序实例化TcpClient对象,调用TcpClient对象的send()方法向服务器端发送请求。

客户端和服务器端测试步骤:

(1)   启动TCP服务器TcpServerTest;

(2)   启动客户端程序TcpClientTest;

(3)   在客户端程序控制台窗口输入hello,向服务器端发送输入的内容;

(4)   服务器端控制台窗口回显客户端发送的内容;

(5)   在服务器端控制台窗口输入OK,服务端向客户端返回在控制台输入的内容;

(6)   客户端判断返回的内容是OK时,结束连接。

  程序执行结果如下图所示:                                         

image.png

image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论