基于socket的聊天室系统设计内容摘要:

+= 端口号必须为数字且范围为 65535 + \r\n。 ()。 return。 } if (serverPort 1 || serverPort 65535) 毕业设计(论文) 13 { += 端口号必须为数字且范围为 65535 + \r\n。 ()。 return。 } //获取 IP地址。 string ipAddress =。 IPAddress ipAdd = (ipAddress)。 listener = new TcpListener(ipAdd, serverPort)。 try { //启动监听。 ()。 //显示启动信息 += + 的服务已经启动 !正在监听端口号: + + \n。 //启动新的线程 Thread ServerThread = new Thread(new ThreadStart())。 = true。 ()。 = !。 = !。 } catch (Exception ex) { += +\r\n。 return。 } } 当服务使用完成后,点击结束服务按钮,停止对端口的监听,界面及部分代码如下: 毕业设计(论文) 14 图 53 服务器停止 服务 后界面图 private void btnStop_Click(object sender, EventArgs e) { = false。 (300)。 += + 的服务已经停 止 ! + \r\n。 //204. 控制按钮的可用性 = !。 = !。 } 服务器收到用户信息后进行进行处理, 代码如下: using System。 using。 using。 using。 using。 using。 毕业设计(论文) 15 using。 namespace AppServer { public class Client { FrmServer server。 Socket currentSocket。 string ipAddress。 string name。 //保留当前连接的状态: //closed connected closed private string state = closed。 public Client(FrmServer server, Socket clientSocket) { = server。 = clientSocket。 ipAddress = getRemoteIPAddress()。 } //获得连接客户端的 IP地址,并转换成一个字符串 private string getRemoteIPAddress() { return ((IPEndPoint)).()。 } //,每连入一个客户端,会启动这个方法 public string Name { get { return name。 } set { name = value。 } } 毕业设计(论文) 16 public Socket CurrentSocket { get { return currentSocket。 } set { currentSocket = value。 } } public string IpAddress { get { return ipAddress。 } } public void ServiceClient() { string[] tokens = null。 byte[] buff = new byte[1024]。 bool KeepConnect = true。 while () { tokens = null。 try { //如果没有信息达到服务器端,则休息 if (currentSocket == null || 1) { (200)。 continue。 } //接收数据并存入 buff数组中 毕业设计(论文) 17 int len = (buff)。 //将字符数组转化为字符串 string clientCommand = (buff, 0, len)。 //tokens[0]中保存了命令标志符( CONN、 CHAT、 PRIV、LIST或 EXIT) tokens = (new Char[] { 39。 |39。 })。 if (tokens == null) { (150)。 continue。 } } catch (Exception ex) { (发生异常 : + )。 } if (tokens[0] == CONN) { //此时接收到的命令格式为: //命令标志符( CONN) |发送者的用户名 |, //tokens[1]中保存了发送者的用户名 = tokens[1]。 if (()) { SendToClient(this, ERR|User + + 已经存在 )。 } else { Hashtable syncClients = ( )。 (, this)。 //更新界面 ()。 毕业设计(论文) 18 //对每一个当前在线的用户发送 JOIN消息命令和LIST消息命令, //以此来更新客户端的当前在线用户列表 myEnumerator = ()。 while (()) { Client client = (Client)。 SendToClient(client, JOIN| + tokens[1] + |)。 (100)。 } //更新状态 state = connected。 SendToClient(this, ok)。 //向客户端发送 LIST命令,以此更新客户端的当前在线用户列表 string msgUsers = LIST| + ()。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。