C# socket 局域网聊天程序的一点心得

C# socket 局域网聊天程序的一点心得

(一)服务器与客户端的关系

1、服务器开启监听服务
      服务器使用特定的端口不停的监听来自客户端的消息。(开启一个新线程进行监听)。
2、监听来自客户端的登录信息并进行校验;
      客户端登陆时会向服务器发送验证消息(用户名、密码),服务器接收到消息后查询数据库进行验证。验证成功后,发送允许登录信号,验证失败,发送不允许登录信号。
3、定时检查客户端的连接。
      监听来自各个客户端发来的心跳包,服务端每隔特定时间检测客户端是否有信息发送。如有则在线,否则已下线。
4、广播信息给客户端。     
      打包所有客户端的信息(IP地址、端口等),每隔特定时间广播转发给每个上线的客户端;

(二)客户端与客户端的关系

1、客户端开启监听服务
      客户端使用特定的端口不停的监听来自其他客户端的消息。(开启一个新线程进行监听)。
2、点对点传输数据。 
      客户端已从服务器获知了各个在线客户端的ip及端口号。这样就可以与其他客户端进行连接。

(三)有关不同类型的文件 

        做聊天程序。会发送不同类型的文件,如文本、文件、图片等格式。这就需要我们做好协议。我们可以把要发送的信息进行包裹。做一个标记。要发送的文本信息前添加几个字节或在后面添加几个字节。用来标记这是文本信息。在接收的时候我们获取标记信息,并还原源消息。通过标记就可以知道。信息的类型。文件、图片等也是如此。

(四)有关跨线程

       做聊天程序会开启多个线程,这就避免不了跨线程访问,我们可以取消跨线程检查机制 
CheckForIllegalCrossThreadCalls = false;
 在这里不推荐使用。可能会引发其他问题。我们可以使用委托。例如我们想要在一个新线程中访问界面线程的控件我们可以这样实现
TextBox1.Dispatcher.Invoke(new Action(() => { TextBox1.Text = "helloword"; }));
实例:链接:http://pan.baidu.com/s/1qWl5jFu 密码:6p4t

你可能感兴趣的:(socket编程)