C#实现Socket

2022-09-17 11:58:31

C#实现Socket连接

服务端

  1. 建立Socket

    AddressFamily.InterNetwork内网,SocketType.Stream以流来通信,Tcp为协议

  2. 电脑主机和端口和ip地址进行绑定

  3. 监听客户端连接

  4. 阻塞方法 生成Socket 接受客户端连接

  5. 声明数组,存放聊天的缓冲区。

  6. 使用while方法 , 接收数据并存放在数组中 实现多次接消息

  7. 还原接收信息为明文

  8. 实现客服给客户发消息

代码如下

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Socket 相当于是通信的主机
            //监听打进来的电话,并转接给客服
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //绑定ip和端口
            EndPoint iped = IPEndPoint.Parse("192.168.43.227:1234");
            serverSocket.Bind(iped);

            //监听有没有电话连接,顺便规划客服人数,如果是0就是无限个客服
            serverSocket.Listen(100);

            //接电话
            //分配客服和客户进行一对一通信
            //阻塞方法 没有电话打进来,那么代码就执行到这里 Accept
            Socket kefuScoket = serverSocket.Accept();
            System.Console.WriteLine("客户的本地端口是:" + kefuScoket.LocalEndPoint.ToString());
            System.Console.WriteLine("打电话进来的客户端是:" + kefuScoket.RemoteEndPoint.ToString());

            //接消息,需要一个消息的缓冲区
            byte[] readBuff = new byte[1024];

            while (true)
            {
                //消息拿到,并存放在缓冲区,并记住消息的长度
                int receiveCount = kefuScoket.Receive(readBuff);
                string receiveMessage = Encoding.UTF8.GetString(readBuff, 0, receiveCount);
                System.Console.WriteLine("客户端发过来的消息:" + receiveMessage);

                //string backMessage = "我是你的专属客服,有什么可以帮助你的";
                kefuScoket.Send(Encoding.UTF8.GetBytes("服务器已经接到你发来的消息:" + receiveMessage));
            }
        }
    }
}

客户端

  1. 建立Socket
  2. Connect连接服务端
  3. try catch语句 捕捉异常
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace clientSocket
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //接收服务器的回馈
            byte[] readBuff = new byte[1024];

            //连接服务器
            clientSocket.Connect("192.168.43.227", 1234);

            //连接上服务器,就能发消息
            string sendMessage;

            //计数器
            int num = 0;

            while (true)
            {
                if (num == 0)
                {
                    sendMessage = "你好,我是192用户";
                    num++;
                }
                else
                {
                    sendMessage = Console.ReadLine();
                }

                //转码,转成0101010的格式
                byte[] sendBytes = Encoding.UTF8.GetBytes(sendMessage);

                //把二进制的消息发出去
                clientSocket.Send(sendBytes);
                int count = clientSocket.Receive(readBuff);
                System.Console.WriteLine("服务器发送的消息是:" + Encoding.UTF8.GetString(readBuff, 0, count));

            }

        }
    }
}
  • 作者:落叶沐
  • 原文链接:https://blog.csdn.net/easily97/article/details/116295039
    更新时间:2022-09-17 11:58:31