在C#中,网络通信是一个非常重要的领域,它涉及到客户端和服务器之间的数据传输,本文将详细介绍C#中的网络通信,包括Socket编程、TCP/IP协议的使用以及相关的代码示例。
Socket编程是实现网络通信的基础,在C#中,可以使用System.Net和System.Net.Sockets命名空间来进行Socket编程,以下是一个简单的例子:
using System; using System.Net; using System.Net.Sockets; using System.Text; class Program { static void Main() { // 创建一个TCP/IP套接字 TcpClient client = new TcpClient(); try { // 连接到服务器 client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888)); // 发送数据 string message = "Hello, Server!"; byte[] data = Encoding.UTF8.GetBytes(message); client.GetStream().Write(data, 0, data.Length); // 接收响应 NetworkStream stream = client.GetStream(); byte[] bytes = new byte[256]; int bytesRead = stream.Read(bytes, 0, bytes.Length); string responseData = Encoding.UTF8.GetString(bytes, 0, bytesRead); Console.WriteLine("Received: {0}", responseData); } catch (SocketException e) { Console.WriteLine("SocketException: {0}", e); } finally { client.Close(); } } }
TCP(传输控制协议)是一种面向连接的、可靠的传输层协议,它提供了一种可靠的字节流服务,确保数据包按顺序到达并且没有丢失或重复,在C#中,可以使用TcpClient和TcpListener类来实现TCP通信。
服务器端代码示例:
using System; using System.Net; using System.Net.Sockets; using System.Text; class TcpServer { static void Main() { TcpListener server = null; try { int port = 8888; IPAddress localAddr = IPAddress.Parse("127.0.0.1"); server = new TcpListener(localAddr, port); server.Start(); Byte[] bytes = new Byte[256]; String data = null; while (true) { Console.WriteLine("Waiting for a connection... "); TcpClient client = server.AcceptTcpClient(); Console.WriteLine("Connected!"); NetworkStream stream = client.GetStream(); int i; while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) { data = Encoding.ASCII.GetString(bytes, 0, i); Console.WriteLine("Received: {0}", data); data = data.ToUpper(); byte[] msg = Encoding.ASCII.GetBytes(data); stream.Write(msg, 0, msg.Length); Console.WriteLine("Sent: {0}", data); } client.Close(); } } catch (SocketException e) { Console.WriteLine("SocketException: {0}", e); } finally { server.Stop(); } } }
客户端代码示例:
using System; using System.Net; using System.Net.Sockets; using System.Text; class TcpClientExample { static void Main() { try { Int32 port = 8888; TcpClient client = new TcpClient("127.0.0.1", port); NetworkStream stream = client.GetStream(); string message = "Hello, Server!"; byte[] data = encodeData(message); stream.Write(data, 0, data.Length); Console.WriteLine("Sent: {0}", message); data = new Byte[256]; String responseData = String.Empty; Int32 bytes = stream.Read(data, 0, data.Length); responseData = decodeData(data, 0, bytes); Console.WriteLine("Received: {0}", responseData); stream.Close(); client.Close(); } catch (Exception e) { Console.WriteLine("Exception: {0}", e); } } public static byte[] encodeData(string data) { return Encoding.UTF8.GetBytes(data); } public static string decodeData(byte[] data) { return Encoding.UTF8.GetString(data); } }
上述代码展示了如何在C#中使用TCP协议进行简单的客户端-服务器通信,服务器不断监听来自客户端的连接请求,当有客户端连接时,它会读取客户端发送的数据并将其转换为大写,然后发送回客户端,客户端发送一条消息给服务器,并接收服务器返回的大写版本,这种模式适用于需要可靠数据传输的场景,如文件传输、即时通讯等,通过这种方式,开发者可以构建复杂的网络应用程序,满足不同的业务需求。