C#基于TCP协议的Socket通信实现的客户端与服务器端交互

开发工具:VS2019,控制台应用程序

TCP协议是一个Stream的协定,就像是电源一样,只要不断电,Stream和电流一般,Socket即为插座,TCP是支持可靠、双向、连接架构的字节数据流。

重要的C# API说明

  • IPAddress addr = IPAddress.Parse(“127.0.0.1”);
    System.Net.IPAddress,IP地址的对象表示方法,将字符串IP地址转换为IPAddress实例。
  • IPEndPoint ipe = new IPEndPoint(addr, 21000);
    System.Net.IPEndPoint,表示一个特定的IP地址和端口的组合,socket绑定等使用,是IP地址和端口被成对处理的对象。
  • AddressFamily.InterNetwork
    System.Net.Sockets.AddressFamily是枚举,InterNetwork表示使用IP V4版本的地址进行通信。
  • SocketType.Stream
    System.Net.Sockets.SocketType是枚举,Stream表示基于字节流,不重复数据的双向通信,使用TCP传输控制协议。

话不多说,直接上代码。

服务器端

实现服务器端的4步骤:

1、组装Socket通信的服务地址和服务端口,建立通信时的EndPoint对象。

2、创建Socket连接,监听到指定的地址和端口。

3、Socket TCP通信数据交互。

4、关闭Socket服务连接。

class SocketServer
    {
        public static void Main(string[] args)
        {
            Boolean running = false;

            //1、socket服务地址和监听端口
            string host = "127.0.0.1";
            int port = 8098;
            // 将IP地址字符串转换为IPAddress对象
            IPAddress address = IPAddress.Parse(host);
            //终结点EndPoint
            IPEndPoint ipe = new IPEndPoint(address, port);

            // 2、创建socket连接服务端并监听端口
            Socket server = new Socket(AddressFamily.InterNetwork,
            							 SocketType.Stream, ProtocolType.Tcp);
            server.Bind(ipe);
            //开始监听
            server.Listen(0);
            Console.WriteLine("已经处于监听状态,等待客户端连接 . . . ");

            // 3、与客户端交互
            while (running)
            {
                Socket remote = server.Accept();
                Console.WriteLine("客户端连接。。。");
                //接收客户端消息
                Receive(remote);
                // 发送给客户端消息
                Send(remote);
            }

            // 4、关闭服务
            if (server != null)
            {
                server.Close();
                server = null;
            }
            Console.WriteLine("Press any key to continue . . . ");
            Console.ReadKey(true);

        }

        static void Receive(Socket socket)
        {
            byte[] bytes = new byte[1024];
            int len = socket.Receive(bytes, bytes.Length, 0);
            //将消息转为字符串
            string recvStr = Encoding.UTF8.GetString(bytes,0,len);
            Console.WriteLine("接收到客户端的消息:{0}", recvStr);
        }

        static void Send(Socket socket)
        {
            string sendStr = "Client send message successful!";
            Console.WriteLine("发送给客户端的消息:{0}", sendStr);
            // 将字符串消息转为数组
            byte[] bytes = Encoding.ASCII.GetBytes(sendStr);
            //发送消息给客户端
            socket.Send(bytes, bytes.Length, 0);
        }
    }

客户端

实现客户端的4步骤:

1、组装Socket通信的地址和端口,建立通信时的EndPoint对象。

2、创建Socket对象,建立与服务器的TCP连接。

3、Socket TCP通信数据交互。

4、关闭Socket通信的物理连接。

class SocketClient
    {
        public static void Main(string[] args)
        {
            // 1、待连接的socket服务地址
            string host = "127.0.0.1";
            int port = 21000;
            // 将将IP地址字符串转换为IPAddress对象
            IPAddress ip = IPAddress.Parse(host);
            // 创建终结点EndPoint
            IPEndPoint ipe = new IPEndPoint(ip, port);

            // 2、创建socket连接客户端
            // 创建Socket并连接到服务器
            Socket client = new Socket(AddressFamily.InterNetwork, 
            							SocketType.Stream, ProtocolType.Tcp);
            // 连接到服务器
            client.Connect(ipe);

            // 3、与服务器端交互
            Send(client);
            Receive(client);

            // 4、关闭Socket连接
            if (client != null)
            {
                client.Close();
                client = null;
            }

            Console.WriteLine(" Press any key to continue . . . ");
            Console.ReadKey(true);
        }

        /***
         * 发送消息
         */
        static void Send(Socket socket)
        {
            string sendStr = " I am a Client!";
            Console.WriteLine("发送给客户端消息 : {0}", sendStr);
            // 将字符串消息转为数组
            byte[] bytes = Encoding.ASCII.GetBytes(sendStr);
            //发送消息给客户端
            socket.Send(bytes, bytes.Length, 0);
        }

        static void Receive(Socket socket)
        {
            byte[] bytes = new byte[1024];
            //从客户端接收消息
            int len = socket.Receive(bytes, bytes.Length, 0);
            //将消息转为字符串
            string recvStr = Encoding.ASCII.GetString(bytes, 0, len);
            Console.WriteLine("接收的服务端消息 : {0}", recvStr);
        }
    }

以上编译完成后,先运行服务器端(Server),再运行客户端(Client),可以看到通信过程的效果。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#基于SocketTCP编程是一种常见的网络编程技术,它允许应用程序通过TCP/IP协议与远程服务器进行通信。在C#中,可以使用System.Net.Sockets命名空间中的TcpClient和TcpListener类来实现TCP连接的建立和监听。 要建立TCP连接,首先需要创建一个TcpClient对象,并指定要连接的服务器的IP地址和口号。然后可以使用TcpClient的Connect方法来建立连接。一旦连接建立成功,就可以使用TcpClient提供的网络流进行数据的发送和接收。 以下是一个简单的C#代码示例,演示了基于SocketTCP编程中的客户服务器交互客户: ```csharp using System; using System.Net.Sockets; public class TcpClientExample { public static void Main() { string serverIP = "127.0.0.1"; int serverPort = 8888; try { TcpClient client = new TcpClient(serverIP, serverPort); // 获取网络流 NetworkStream stream = client.GetStream(); // 发送数据 string message = "Hello, server!"; byte[] data = System.Text.Encoding.UTF8.GetBytes(message); stream.Write(data, 0, data.Length); // 接收数据 data = new byte[256]; int bytesRead = stream.Read(data, 0, data.Length); string response = System.Text.Encoding.UTF8.GetString(data, 0, bytesRead); Console.WriteLine("Server response: " + response); // 关闭连接 client.Close(); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); } } } ``` 服务器: ```csharp using System; using System.Net; using System.Net.Sockets; public class TcpServerExample { public static void Main() { int serverPort = 8888; try { TcpListener server = new TcpListener(IPAddress.Any, serverPort); // 开始监听 server.Start(); Console.WriteLine("Server started. Waiting for clients..."); // 接受客户连接 TcpClient client = server.AcceptTcpClient(); Console.WriteLine("Client connected."); // 获取网络流 NetworkStream stream = client.GetStream(); // 接收数据 byte[] data = new byte[256]; int bytesRead = stream.Read(data, 0, data.Length); string request = System.Text.Encoding.UTF8.GetString(data, 0, bytesRead); Console.WriteLine("Client request: " + request); // 发送数据 string response = "Hello, client!"; data = System.Text.Encoding.UTF8.GetBytes(response); stream.Write(data, 0, data.Length); // 关闭连接 client.Close(); server.Stop(); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); } } } ``` 以上代码演示了一个简单的TCP客户服务器交互过程。客户服务器发送一条消息,服务器接收到消息后,返回一条响应给客户。可以根据实际需求进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值