博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinForm聊天室
阅读量:5205 次
发布时间:2019-06-14

本文共 2673 字,大约阅读时间需要 8 分钟。

前几天开始学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

你可能感兴趣的文章
Docker
查看>>
bzoj2259 [Oibh]新型计算机
查看>>
对位与字节的深度认识
查看>>
C++编程基础二 16-习题4
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
服务器被疑似挖矿程序植入107.174.47.156,发现以及解决过程(建议所有使用sonatype/nexus3镜像的用户清查一下)...
查看>>
类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。
查看>>
JQuery 学习
查看>>
session token两种登陆方式
查看>>
C# ArrayList
查看>>
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
java,多线程实现
查看>>
个人作业4-alpha阶段个人总结
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
递归-下楼梯
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
Azure Iaas基础之---创建虚拟机
查看>>
不错的MVC文章
查看>>
网络管理相关函数
查看>>