话不多说,首先给大家看一下整体的运行效果
首先这是登陆界面(艺术细胞不行,不能怪我- -)
这是一个类似QQ主界面的界面(虽然不好看,勉强能用)
然后双击其中一个名字,进入聊天页面,另外在打开一个界面,实现双方的聊天
这就是主要的界面了,还有一些忘记密码,注册,完善个人资料等界面都比较简单,就不一一列出了。所以希望这篇博客能帮助到那些想实现一个比较完整的系统的小伙伴。
接下来就是重头戏了,核心代码了
居所周知,我们做这个聊天系统是采用的C/S模式。首先我们在登陆成功之后,都会进入到主界面,而进入到主界面之后,我们的监听线程就会启动,就相当于启动了一个服务器端。然后我们来看看这个监听线程的代码
public void listen()
{
Random rd = new Random();
int port = 8080;//设置聊天程序的端口号
IPAddress ipaddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];//动态的获取你电脑的Ip地址
tcplistener = new TcpListener(IPAddress.Any, port);//设置TCP的监听器
tcplistener.Start();//监听开始
socketforclient = tcplistener.AcceptSocket();//用监听器获取连接进来的套接字
if (socketforclient.Connected)//如果有套接字连接了
{
label1.Text = "收到了消息";
networkstream = new NetworkStream(socketforclient);
streamreader = new StreamReader(networkstream);
streamwriter = new StreamWriter(networkstream);
streamreader1 = streamreader;//创建用于传输数据的读写流
}
}
监听应该用一个线程来启动,所以在窗体的初始化的时候就启动这个线程。
private void Form2_Load(object sender, EventArgs e)
{
listen1= new Thread(new ThreadStart(listen));
listen1.Start();
}
到这里,小伙伴们就会问了,哎,每个登陆进来界面的都是服务器端,那么哪个是客户端呢?
这就是本系统的精妙的地方了。细心的你一定会发现主界面有一个好友列表,当你双击好友的名字的时候,你就会以客户端的形式连接到你所点击的人的服务器端,如果他没有登陆,也就是服务器没有开始服务,那么就会有提示消息,你们也就当然无法进行聊天了。
下面就让我们来看看服务器端的核心代码。
同样的,由于双方都进入了聊天页面,双方都必须有一个接收消息的线程。
recthread1 = new Thread(new</