1.TCP Socket在Java上的实现

Java 为 TCP 协议提供了两个类:Socket 类和 ServerSocket 类。一个 Socket 实例代表了TCP 连接的一端。一个 TCP 连接(TCP connection)是一条抽象的双向信道,两端分别由 IP地址和端口号确定。在开始通信之前,要建立一个 TCP 连接,这需要先由客户端 TCP 向服务器端 TCP 发送连接请求。ServerSocket 实例则监听 TCP 连接请求,并为每个请求创建新的 Socket 实例。也就是说,服务器端要同时处理 ServerSocket 实例和 Socket 实例,而客户端只需要使用 Socket 实例。每个Socket实例会关联一个InputStream和OutputStream对象,我们通过将字节写入套接字的OutputStream来发送数据,并通过从InputStream来接收数据。

2.TCP连接的建立步骤

  客户端向服务器端发送连接请求后,就被动地等待服务器的响应。典型的TCP客户端要经过下面三步操作: 

   1、创建一个Socket实例:构造函数向指定的远程主机和端口建立一个TCP连接;

   2.通过套接字的I/O流与服务端通信;

   3、使用Socket类的close方法关闭连接。

 

  服务端的工作是建立一个通信终端,并被动地等待客户端的连接。典型的TCP服务端执行如下两步操作:

     1、创建一个ServerSocket实例并指定本地端口,用来监听客户端在该端口发送的TCP连接请求;

     2、重复执行:

           1)调用ServerSocket的accept()方法以获取客户端连接,并通过其返回值创建一个Socket实例;

           2)为返回的Socket实例开启新的线程,并使用返回的Socket实例的I/O流与客户端通信;

           3)通信完成后,使用Socket类的close()方法关闭该客户端的套接字连接

        Java TCP Socket编程

3.TCP Demo

Demo1.基本的流发送示例:

服务端开启一个TCP服务器,参数为端口号

客户端启动一个TCP服务,参数为服务端的地址,发送的字符,端口号

 1 import java.net.Socket;
 2 import java.net.SocketException;
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 
 7 public class TCPClient {
 8 
 9     public static void main(String[] args) throws IOException {
10 
11         if ((args.length < 2) || (args.length > 3))
12 
13             throw new IllegalArgumentException(
14                     "Parameter(s):<Server> <Word> [<Port>]");
15 
16         String server = args[0]; // Server name or IP address
17         /* Convert argument String to bytes using the default character encoding */
18         byte[] senddata = args[1].getBytes();
19         int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;
20         /* Create socket that is connected to server onspecified port*/
21         Socket socket = new Socket(server, servPort);
22         System.out.println("Connected to server...sending echo string");
23 
24         InputStream in = socket.getInputStream();
25         OutputStream out = socket.getOutputStream();
26         out.write(senddata); // Send the encoded string to the server
27 
28         int totalBytesRcvd = 0; // Total bytes received so far
29         byte[] recvdata = new byte[in.available()];
30         int bytesRcvd; // Bytes received in last read
31         while (totalBytesRcvd < recvdata.length) {
32             if ((bytesRcvd = in.read(recvdata, totalBytesRcvd, recvdata.length
33                     - totalBytesRcvd)) == -1)
34                 throw new SocketException("Connection closed prematurely");
35             totalBytesRcvd += bytesRcvd;
36         } // data array is full
37 
38         System.out.println("Received: " + new String(recvdata));
39 
40         socket.close(); // Close the socket and its streams
41     }
42 }
TCPClient

相关文章:

  • 2022-01-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-11
  • 2022-12-23
  • 2022-12-23
  • 2021-06-28
猜你喜欢
  • 2021-07-06
  • 2021-07-12
  • 2021-08-06
  • 2021-08-14
  • 2022-01-18
相关资源
相似解决方案