当前位置:首页 > 行业动态 > 正文

C#使用Socket发送和接收TCP数据实例

csharp,using System;,using System.Net;,using System.Net.Sockets;,using System.Text;class Program,{, static void Main(), {, // 创建IPEndPoint实例,指定远程主机的IP地址和端口号, IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000); // 创建Socket实例,使用TCP协议, Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try, {, // 连接到远程主机, socket.Connect(remoteEP); // 发送数据, string message = "Hello, Server!";, byte[] buffer = Encoding.ASCII.GetBytes(message);, socket.Send(buffer, 0, buffer.Length, SocketFlags.None); // 接收响应, buffer = new byte[1024];, int bytesReceived = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);, string response = Encoding.ASCII.GetString(buffer, 0, bytesReceived); Console.WriteLine("Server response: " + response);, }, catch (Exception ex), {, Console.WriteLine("Exception: " + ex.Message);, }, finally, {, // 关闭Socket, socket.Shutdown(SocketShutdown.Both);, socket.Close();, }, },},

在C#中,使用Socket类可以方便地进行TCP数据的发送和接收,以下是一个简单的实例,展示了如何在C#中实现TCP通信:

服务器端代码

1、创建监听

创建一个TcpListener对象,绑定到本地IP地址和端口上,并开始监听客户端的连接请求。

示例代码:

   using System;
   using System.Net;
   using System.Net.Sockets;
   using System.Text;
   class TcpServer
   {
       public static void StartListening()
       {
           // 创建TCP监听器,绑定到本地IP地址和端口
           TcpListener listener = new TcpListener(IPAddress.Any, 12345);
           listener.Start();
           Console.WriteLine("服务器已启动,正在监听端口12345...");
           while (true)
           {
               // 接受客户端连接
               TcpClient client = listener.AcceptTcpClient();
               Console.WriteLine("客户端已连接!");
               // 创建线程处理客户端请求
               HandleClientComm(client);
           }
       }
       static void HandleClientComm(TcpClient client)
       {
           try
           {
               // 获取网络流
               NetworkStream stream = client.GetStream();
               // 缓冲区大小
               byte[] bytes = new byte[client.ReceiveBufferSize];
               int bytesRead = 0;
               // 读取数据
               while ((bytesRead = stream.Read(bytes, 0, bytes.Length)) != 0)
               {
                   string receivedData = Encoding.UTF8.GetString(bytes, 0, bytesRead);
                   Console.WriteLine("收到数据: " + receivedData);
                   // 响应客户端(可选)
                   string response = "服务器已收到数据: " + receivedData;
                   byte[] buffer = Encoding.UTF8.GetBytes(response);
                   stream.Write(buffer, 0, buffer.Length);
               }
               client.Close();
           }
           catch (SocketException se)
           {
               Console.WriteLine("SocketException: " + se.Message);
           }
           finally
           {
               client.Close();
           }
       }
       static void Main(string[] args)
       {
           StartListening();
       }
   }

2、运行服务器

当运行上述服务器代码时,服务器将开始监听本地的12345端口,等待客户端的连接请求,一旦有客户端连接,服务器将接受连接并创建一个新的线程来处理该客户端的通信。

客户端代码

1、创建连接

创建一个TcpClient对象,指定服务器的IP地址和端口号,并尝试连接到服务器。

示例代码:

   using System;
   using System.Net.Sockets;
   using System.Text;
   class TcpClientApp
   {
       static void Main(string[] args)
       {
           // 创建TCP客户端,连接到本地主机的12345端口
           TcpClient client = new TcpClient("127.0.0.1", 12345);
           Console.WriteLine("已连接到服务器!");
           try
           {
               // 获取网络流
               NetworkStream stream = client.GetStream();
               // 要发送的数据
               string dataToSend = "你好,服务器!";
               byte[] buffer = Encoding.UTF8.GetBytes(dataToSend);
               // 发送数据
               stream.Write(buffer, 0, buffer.Length);
               Console.WriteLine("数据已发送到服务器: " + dataToSend);
               // 读取服务器响应(可选)
               byte[] bytes = new byte[client.ReceiveBufferSize];
               int bytesRead = stream.Read(bytes, 0, bytes.Length);
               string response = Encoding.UTF8.GetString(bytes, 0, bytesRead);
               Console.WriteLine("收到服务器响应: " + response);
               client.Close();
           }
           catch (SocketException se)
           {
               Console.WriteLine("SocketException: " + se.Message);
           }
           finally
           {
               client.Close();
           }
       }
   }

2、运行客户端

当运行上述客户端代码时,客户端将尝试连接到服务器,并向服务器发送一条消息,客户端将等待并读取服务器的响应消息,客户端关闭与服务器的连接。

通过上述实例,可以看到在C#中使用Socket进行TCP通信的基本流程,服务器端需要创建一个TcpListener对象来监听客户端的连接请求,并为每个连接创建一个处理线程,客户端则需要创建一个TcpClient对象来连接到服务器,并通过NetworkStream对象进行数据的发送和接收,在实际应用中,可以根据具体需求对上述代码进行扩展和优化,例如添加异常处理、支持多线程或异步编程等。