WinForm聊天室

前几天开始学Socket编程,跟着老师一点一点的做。最后做了一个WinForm版的小聊天室。这个聊天室的客户端和服务端都只是在本机上运行。

 

这里我首先和大家谈谈我对聊天室的一点理解,聊天室其实是服务端分配一个端口,开启一个一直监听有没有客户端来连接服务器的Socket,
如果一台客户端要去连接这台服务器,那么就会分配一个通信用的Socket并知道这台服务器的IP和端口号,去向服务器发出连接请求,
如果服务器的监听Socket监听到有一台客户端发出连接请求,那么服务器监听Socket就会创建一个新的Socket,也称连接Socket来和
客户端进行连接通信。

 

下面上服务端开始监听Socket的代码:

        //监听Socket
        private void btnStart_Click(object sender, EventArgs e)
        {
            //ip地址
            IPAddress ip = IPAddress.Parse(txtServer.Text);
            //IP地址和端口号
            IPEndPoint point = new IPEndPoint(ip, int.Parse(txtPort.Text));
            //创建监听Socket
            Socket socket = new Socket(AddressFamily.InterNetwork,       SocketType.Stream, ProtocolType.Tcp);
            //绑定IP和端口号
            socket.Bind(point);
            通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
            开启监听Socket     监听队列的长度
            socket.Listen(10);
            btnStart.Enabled = false;
            ShowMsg("开始监听...");
            //监听端口号,如果有客户端连接,创建新的Socket用于通信
            //Socket connSocket = socket.Accept();
            Thread t = new Thread(Listen);
            t.IsBackground = true;
            t.Start(socket);
        }

  

服务端监听客户端连接请求代码:

Socket socket = obj as Socket;
            //这样可以不断的监听客户端发送的连接请求
            while (true){
                //通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
                //监听端口号,如果有客户端连接,创建新的Socket用于通信
                //socket.Accept();会阻塞窗体的运行
                Socket connSocket = socket.Accept();
                //当前连接的客户端IP和端口号
                string ipport=connSocket.RemoteEndPoint.ToString();
                //连接的客户端IP和端口号显示在下拉框中
                cmbClient.Items.Add(ipport);
                //将连接的客户端IP、端口号和Socket存储Dictionary中
                dic.Add(ipport, connSocket);
                //本机IP和端口号
                //connSocket.LocalEndPoint
                ShowMsg(connSocket.RemoteEndPoint.ToString());
                Thread t = new Thread(ReceiveMsg);
                t.IsBackground = true;
                t.Start(connSocket);
            }

  

客户端Socket代码:

 

//客户端连接服务器的IP
            IPAddress ip = IPAddress.Parse(txtServer.Text);
            //客户端连接服务器的IP和端口号
            IPEndPoint point = new IPEndPoint(ip, int.Parse(txtPort.Text));
            try { 
                //创建通信连接的Socket
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(point);
                ShowMsg("连接成功");
            }
            catch(Exception ex) {
                ShowMsg(ex.Message);
            }            
            //接收消息
            Thread t = new Thread(Receive);
            t.IsBackground = true;
            t.Start();

 

  

由于代码比较多,这里就不一一贴上所有代码

 

转载于:https://www.cnblogs.com/rampb/p/3393596.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值