TCP实现服务器与客户端的连接

您所在的位置:网站首页 端口的端字怎么写 TCP实现服务器与客户端的连接

TCP实现服务器与客户端的连接

2024-07-11 21:43| 来源: 网络整理| 查看: 265

实现服务器和客户端的通信,有以下需求:

服务器:

(1)服务器需要接收客户端的聊天请求,为了让客户端找到自己,必须要有一个确定的 ip地址 + 端口号 来标识自己。 (2)服务器接收到客户端发来的消息,需要给客户端回复。

客户端:

(1)实现通信,客户端手续需要连接至服务器。而连接服务器,我们需要知道服务器的 ip地址 + 端口号。 (2)在通信过程中,我们要给服务器发送消息,也要接收服务器回复的消息。 (3)客户端输入"quit"时通信结束。

服务器的实现:

(1)服务器调用socket起一个端口,供客户端连接。

ServerSocket tcpServerSocket = new ServerSocket (8080);//起一个端口号

(2)利用 socket.accept() 方法等待客户端的连接,如果没有客户端连接,服务器将一直处于阻塞状态。

Socket clientSocket = tcpServerSocket.accept ();//接收客户端 InetAddress clientAddress = clientSocket.getInetAddress ();//获取到客户端的ip地址 int clientPort = clientSocket.getPort ();//获取到客户端的端口号

(3)getInputStream() 方法获取的是字节流,我们需要用 InputStreamReader() 将字节流转换为字符流。 BufferedReader从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。

//获取输入字节流(即客户发送来的字节流) InputStream is = clientSocket.getInputStream (); //字节流转换为字符流 InputStreamReader isReader = new InputStreamReader (is,"UTF-8"); //字符流转换为缓冲字符流 BufferedReader reader = new BufferedReader (isReader);

(4)接收客户端发送的消息,服务端回复消息给客户端。

//获取输出字符流(即回复给客户端的消息) OutputStream os = clientSocket.getOutputStream (); PrintStream out = new PrintStream (os,true,"UTF-8"); String line; //line为收到的客户端的消息 while((line = reader.readLine ()) != null ) { System.out.println ("收到消息:" + line); System.out.print ("请回复:"); String response = scanner.nextLine (); out.println (response); } 客户端的实现:

(1)起一个客户端端口,用作之后的连接工作,即和服务器连接。 我们的服务器和客户端都是在自己的电脑上的,所以服务器的 ip 为 127.0.0.1。

Socket tcpClientSocket = new Socket ();//起一个客户端端口 byte[] ipv4 = {127,0,0,1};//跟本机交互 InetAddress serverAdress = InetAddress.getByAddress (ipv4);//获取服务器的ip地址

(2)将客户端的端口连接至服务器。

//连接服务器 SocketAddress serverSocketAddress = new InetSocketAddress (serverAdress,8080);//服务器ip+端口 tcpClientSocket.connect (serverSocketAddress);//tcp是面向连接的

(3)发送给服务器消息,接收服务器回复的消息。

while(true){ System.out.print ("请输入:"); String request = scanner.nextLine (); //当用户输入 quit 时,退出程序 if (request.equalsIgnoreCase ("quit")) { break; } //通过字节流直接写入信息 OutputStream os = tcpClientSocket.getOutputStream (); PrintStream out = new PrintStream (os,true,"UTF-8");//自动刷新信息 out.println (request); //通过字节流,直接读取数据 InputStream is = tcpClientSocket.getInputStream ();//获取此端口的输入流,即服务器回复的消息 BufferedReader reader = new BufferedReader (new InputStreamReader (is,"UTF-8")); String response = reader.readLine (); System.out.println ("收到回复:" + response); } tcpClientSocket.close (); }

完整的程序:

服务器:

import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.So


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3