您现在的位置:网络学院 > 开发教室 > 工具平台 > VC/C#
基于TCP/IP的局域网多用户通信(3)

出处:PConline
责任编辑:zwg

[02-7-4 15:51] 作者:袁 渊


作者:袁 渊(华东船舶工业学院机械系)
转载请与作者联系

三、具体实施

3.1 注册/登陆服务器

  注册/登陆服务器程序是基于对话框的,该程序使用I/O端口56789与用户端连接。
首先,在对话框初始化的同时完成网络初始化,即执行Init_net()函数,代码(不完整)如下:

BOOL CServerDlg::Init_net()
{////////////////////////网络初始化///////////////////////////////
addrLen=sizeof(SOCKADDR_IN);
status=WSAStartup(MAKEWORD(1, 1), &Data);
………
memset(&serverSockAddr, 0, sizeof(serverSockAddr));

/*以下指定一个与某个SOCKET连接本地或远程地址*/

serverSockAddr.sin_port=htons(PORT);
serverSockAddr.sin_family=AF_INET;
serverSockAddr.sin_addr.s_addr=htonl(INADDR_ANY);
serverSocket=socket(AF_INET, SOCK_STREAM, 0);//初始化SOCKET
………

status=bind(serverSocket,(LPSOCKADDR)&serverSockAddr,sizeof(serverSockAddr)); //将SOCKET与地址绑定
………
status=listen(serverSocket, 5); //开始监听
………
return true;
}


  接着按下RUN键开始服务器功能,执行Reg_Load()函数,使服务器始终处于等待连接状态,但这样也使该线程始终阻塞。当有用户连接时,该函数创建一个任务用于处理与用户及数据库的事务。具体任务函数略(详见原始代码文件)。

void CServerDlg::Reg_Load()
{
while(1)
{
CWinThread* hHandle;
clientSocket=accept(serverSocket,(LPSOCKADDR)&clientSockAddr,&addrLen); //等待连接,阻塞
hHandle=AfxBeginThread(talkToClient,(LPVOID)clientSocket);//有连接时,创建任务
………
}
}


  任务函数在接收到消息时,要对数据库进行操作,由于数据库较简单,采用ODBC连接ACCESS数据库(将netuser.mdb在ODBC数据管理器中安装成同名数据源)具体代码略。

[下一页]


相关文章:

如何实现提取并保存图标资源
Office 2000风格的停泊、智能型菜单的实现
VC制作具有声音效果的动画桌面精灵
VC6实现简单的闪屏
windows编程通用的Win32类型和常见的结构
VC中如何等比例缩放图像
下载并保存相关网页
『VC++技术内幕』学习笔记(1)
扩展MFC类库建立自己的界面类库(1)
『VC++技术内幕』学习笔记(2)


内容搜索 
高级搜索

本栏今日焦点