11

C#聊天软件实现

 3 years ago
source link: https://xiang578.com/post/Csharp-chat-softwave.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

C#聊天软件实现

发表于

2017-04-19 更新于 2021-04-12 分类于 程序园

阅读次数: 222
本文字数: 734

前几天面试,被问如何实现一个类似微信的聊天软件。当时说了一个大概的想法,面试官没有怎么评价,只是最后建议我有空多做一些项目。正好最近不怎么忙,就实现一下。写了一个简易的模型,在这个过程中应用了很多原来学过的东西,当然还有很多问题没有解决。

  1. 这个软件选择C/S架构,所以写了一个服务器端程序和一个客户端程序,然后通信使用的是TCP协议。

  2. 利用socket完成通信,大致的过程如下图所示。

%E5%A5%97%E6%8E%A5%E5%AD%97.JPG 3. 服务器上开两个线程threadListenConnectthreadReceivePacket。服务器上的socket利用bind绑定服务器的ip和端口号。第一个线程死循环监听端口,是否有新的connect请求,并将新的连接socket保存到list中。再利用第二个线程接受客户端发来的数据包,并拆包执行进行相关功能。服务器之后,按照包中的内容判断是否需要发送到其他特定的客户端还是广播消息。

  1. 客户端中开一个线程threadReceivePacket。先和服务器连接,然后利用这个线程接受服务器发过来的数据包。这里也实现了发送给某个特定的客户端和广播。发包和拆包过程和服务器上差不多。

  2. 数据包主要包括发送方ip、端口和接收方ip、端口,以及操作代码。不同的数据段用‘|’分割,接收方也按这样拆包就可以了。

  3. TCP是面向连接的协议,拥有缓存窗口,所以可能会有粘包现象,可能将程序一次产生的命令,分成多次发送。所以数据包里面还要标记一下,我用了''做新的包开始标记,用'做结束标记,如果聊天内容里面有相同的标记的,可以强行转化一下。

  4. 这个程序还可以加上数据库搞出注册以及保存聊天消息,然后自己也没有去写消息的排序以及私聊功能,待做。

  5. 最后相关代码放在github上面

服务器端:%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF.jpg

客户端1:%E5%AE%A2%E6%88%B7%E7%AB%AF1.jpg

客户端2:%E5%AE%A2%E6%88%B7%E7%AB%AF2.jpg


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK