基于TCP/IP的局域网多用户通信
2006-07-21 11:10:10 来源:WEB开发网UINT SendData(void* cs)
3.3 用户端
{
SOCKET clientSocket=(SOCKET)cs;
while(1)
{
if(info_data.data!="Close!")
{
m_mutex.Lock(); //互锁
numsnd=send(clientSocket,info_data.data,
info_data.data.GetLength(),NO_FLAGS_SET); //发送数据
now=info_data.thread;
m_mutex.Unlock(); //解锁
now->SuspendThread(); //自身挂起
}
else
{ goto bb; }
}
bb: closesocketlink((LPVOID)clientSocket); //关闭连接
AfxEndThread(0,true); //结束本线程
return 1;
}
很显然,用户端不用考虑多线程,网络连接技术也比较成熟,因此在通信方面没有什么难题。但是,用户端是面向实际用户的,所以,不论是界面还是功能都必须友好。就像大多数软件的更新一样,界面友好度的提高以及功能的完善往往是放在首位的。由此可见,单从总体设计与技术实现角度来讲,用户端的工作量是十分大的,并且设计较服务器端复杂得 多。我粗略总结了以下几条:
●与服务器通信格式兼容;
●操作简单、易用,有美观的界面及快捷键;
●准确地接收和传输数据;
●所有的数据记录与提取功能;
●多种消息接收提示方式,比如托盘图标(发送者头像)闪烁、声音提示等;
根据以上内容,我设计了三个独立的对话框分别用来完成注册、登陆、通信功能,登陆和注册对话框与服务器的56789I/O端口连接,通信对话框与服务器的56790I/O端口连接,这样就很好地实现了注册登陆与通信的隔离,既能使服务器负载降低,同时又能保证一定的通信安全性。
由于本部分不是主要内容,详细代码见程序。
四、结束语
通过以上阐述可以知道,本系统分为服务器端和用户端,服务器端又分为注册/登陆服务器和通信服务器,通过通信服务器的转发功能实现了局域网内的多用户通信功能。本文运用了多线程技术和共享数据结构技术实现了通信服务器的转发功能,使一般基于TCP/IP的网络应用程序得到了发展。本系统已经在我实验室的局域网(一台服务器,二十台客户机)运行通过。
更多精彩
赞助商链接