C#的Socket编程

本文是关于C#中使用Socket进行编程的学习笔记,主要涵盖简易的客户端和服务器端的交互。服务器端通过ServerManager.cs接收客户端连接,并为每个连接创建单独的Socket进行通信。客户端利用SocketClient.cs建立到服务器的TCP连接,实现数据交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c# Socket编程

—— 学习Socket笔记(简易的客服端和客户端交接)

  • Socket一般应用模式(服务器端和客户端)

    —— 服务器端的Socket(至少需要两个)

    • 一个负责接收客户端连接请求(但不负责与客户端通信),每成功接收到客户端的连接便在服务器端产生一个对应的复杂通信的Socket(最好是用一个list存储然后管理起来)
    • 在接收到客户端连接时创建,为每个连接成功的客户端请求在服务器端都创建一个对应的Socket(负责和客户端通信)

    ——客户端的Socket

    • 必须指定要连接的服务器地址和端口,通过创建一个Socket对象来初始化一个到服务器端的TCP连接/UDP链接(看服务端是建立什么链接的)

  • 服务端

    • ServerManager.cs(负责接收客户端连接请求)
    class ServerManager
    {
        static List<Client> clientList=new List<Client>();
        static void Main(string[] args)
        {
            //绑定ip和端口号
            Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            tcpServer.Bind(new IPEndPoint(IPAddress.Parse("192.168.43.36"), 7788));
            Console.WriteLine("server is running");
            //开始监听
            tcpServer.Listen(100);
            while(true)
            {
                Socket socketClient = tcpServer.Accept();
                Console.WriteLine("a client is conneting");
                Client client = new Client(socketClient);
                clientList.Add(client);
            }       
        }
    }
  • Client.cs就是负责和客户端通信
class Client
    {
        private Socket socketClient;
        private Thread t;
        private byte[] data = new byte[1024];
        public Client(Socket s)
        {
            socketClient = s;
            //开一个线程来接受信息
            t = new Thread(ReceiveMessage);
            t.Start();
        }
         //接受信息的线程入口
        private void ReceiveMessage()
        {
            while(true)
            {
                int length=socketClient.Receive(data);
                string message = Encoding.UTF8.GetString(data);
            }
        }
    }
  • 客户端(unity)

    -SocketClient.cs
public class SocketClient : MonoBehaviour {

    private string ipAdress = "192.168.43.36";
    private int port = 7788;
    private Socket socketClient;
     	
	void Start () {
        ConnetToServer();
    }

    void ConnetToServer()
    {
        socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socketClient.Connect(new IPEndPoint(IPAddress.Parse(ipAdress), port));
    }
    //发送消息的方法体
 	void SendMessage(string message)
    {
        byte[] data = Encoding.UTF8.GetBytes(message);
        socketClient.Send(data);
    }
}    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值