基于Socket的聊天室源程序
基于Socket的聊天室源程序:聊天室主要由聊天室服务器和聊天室客户端组成。聊天室服务器负责管理与客户端的连接并发送消息给客户端;客户端负责接收或者发送聊天消息,登录聊天室服务器等。
代码分客户端和服务器端代码。
- 客户端主要流程:
启动聊天服务器-->启动监听器-->等待-->接受客户端连接-->启动客户数据接收线程
客户数据接收线程:当保持连接且SocketServiceFlag为True时读取数据并解析命令,一直循环这个过程直到收到退出命令。共五种命令,CONN命令,LIST命令, CHAT命令, PRIV命令, EXIT命令。
CONN命令:向全部用户发送JOIN命令,向当前用户(自己)发送LIST命令
LIST命令:向当前用户发送LIST命令
CHAT命令:向全部用户发送CHAT命令
PRIV命令: 向接收者发送数据,向发送者发送数据
EXIT命令:删除用户数据,向全部用户发送QUIT命令
源代码下载:点击下载
该代码来自《C#网络与通信程序设计案例精讲》 (吴晨,陈建孝;清华大学出版社)中的源代码。具体的设计过程可参考该书。代码为C#语言编写。
代码中关于C#的知识点:
- String转成int
string port;
int lport;
lport=System.Convert.ToInt32(port);
- int转成String
this.tbSocketClientNum.Text = System.Convert.ToString(clients.Count);
- String转成Byte[]数组
string msg;
System.Byte[] message=System.Text.Encoding.Default.GetBytes(msg.ToCharArray());
- Byte[]数组转成String
byte[] buff=new byte[1024];
string clientCommand=System.Text.Encoding.Default.GetString(buff, 0, len);//第二个参数为index
- 抛出异常
throw new ArgumentException("端口号为空,不能启动服务器");
- 向RichTextBox追加文本
private System.Windows.Forms.RichTextBox rtbSocketMsg;
this.rtbSocketMsg.AppendText("无效的端口号:" + e.ToString()+"\n");
- 获得本机局域网IP地址
using System.Net;
IPAddress[] AddressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
if (AddressList.Length<1)
{
return "";
}
return AddressList[0].ToString();
- Socket监听
using System.Net.Sockets;
//该服务器默认的监听的端口号
private TcpListener listener;
IPAddress ipAdd=IPAddress.Parse(ip);
//创建服务器套接字
listener=new TcpListener(ipAdd, port);
//开始监听服务器端口
listener.Start();