求一个MFC程序,有两个线程,每个线程有一个mfc socket 例子,都能与服务器连接发送和接收字符串

2010年12月 挨踢职涯大版内专家分月排行榜第三2010年11月 C/C++大版内专家分月排行榜第三
2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
本帖子已过去太久远了,不再提供回复功能。2584人阅读
软件开发进阶(652)
网络编程(84)
& & & 我们首先来看服务端(涉及非阻塞socket和多线程):
#include &stdio.h&
#include &winsock2.h&
#include &windows.h&
#pragma comment(lib, &ws2_32.lib&)
#define BUF_SIZE
sockaddr_in addrC // 为了让通信线程获取ip
// 通信线程
CommThread(LPVOID
SOCKET sClient = (SOCKET)(LPVOID)
char buf[BUF_SIZE] = {0};
int retVal = recv(sClient, buf, BUF_SIZE, 0);
if(SOCKET_ERROR == retVal)
int err = WSAGetLastError();
if(WSAEWOULDBLOCK == err) // 暂时没有数据
Sleep(100);
// 输出客户端连接信息
SYSTEMTIME
GetLocalTime(&st);
char sDateTime[100] = {0};
sprintf(sDateTime, &%4d-%2d-%2d %2d:%2d:%2d&, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
printf(&%s, The client is [%s:%d]. Msg from client is : %s\n&, sDateTime, inet_ntoa(addrClient.sin_addr), addrClient.sin_port, buf);
char msg[BUF_SIZE] = {0};
sprintf(msg, &Message received is : %s&, buf);
retVal = send(sClient, msg, strlen(msg), 0);
if(SOCKET_ERROR == retVal)
int err = WSAGetLastError();
if(err == WSAEWOULDBLOCK)
Sleep(500);
closesocket(sClient);
int main()
WSAStartup(MAKEWORD(2, 2), &wsd);
SOCKET sServer = socket(AF_INET, SOCK_STREAM, 0);
// 设置套接字为非阻塞模式
int iMode = 1;
ioctlsocket(sServer, FIONBIO, (u_long FAR*) &iMode);
// 设置服务器套接字地址
SOCKADDR_IN addrS
addrServ.sin_family = AF_INET;
addrServ.sin_port = htons(8888);
addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
bind(sServer,(const struct sockaddr*)&addrServ, sizeof(SOCKADDR_IN));
listen(sServer, 10);
printf(&Server start...\n&);
int addrClientlen = sizeof(addrClient);
SOCKET sClient = accept(sServer, (sockaddr FAR*)&addrClient, &addrClientlen);
if(INVALID_SOCKET == sClient)
int err = WSAGetLastError();
if(WSAEWOULDBLOCK == err)
// 无法立即完成非阻塞套接字上的操作
Sleep(100);
// 创建通信线程
CreateThread(NULL, NULL, CommThread, (LPVOID)sClient, 0, NULL);
// 释放套接字
closesocket(sServer);
WSACleanup();
getchar();
}& & & 不多解释。 先把服务端运行起来吧。
& & & 下面, 我们来看看客户端:
#include &winsock2.h&
#include &stdio.h&
#pragma comment(lib, &ws2_32.lib&)
int main()
WORD wVersionR
WSADATA wsaD
wVersionRequested = MAKEWORD(2, 2);
WSAStartup( wVersionRequested, &wsaData );
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrS
addrSrv.sin_addr.S_un.S_addr = inet_addr(&127.0.0.1&);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(8888);
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
send(sockClient, &hello world&, strlen(&hello world&) + 1, 0);
char recvBuf[100] = {0};
recv(sockClient, recvBuf, 100, 0);
printf(&%s\n&, recvBuf);
closesocket(sockClient);
WSACleanup();
& & & &然后同时运行多个客户端进程(请注意, 如果关掉某一个客户端进程, 则会引起一些异常, 为了简便起见, 本文就先不考虑这个情况了)。
& & & &通过观察服务端和客户端的结果, 我们可以理解多线程服务器(非阻塞socket).&
& & & &好, 先这样, 睡觉去。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2815129次
积分:40000
积分:40000
排名:第84名
原创:1584篇
转载:130篇
评论:1663条
(11)(32)(52)(8)(10)(28)(56)(32)(26)(15)(42)(63)(38)(39)(75)(43)(4)(20)(33)(17)(11)(7)(48)(53)(51)(52)(35)(20)(53)(41)(35)(13)(32)(36)(7)(1)(47)(23)(26)(4)(13)(4)(19)(72)(13)(2)(14)(45)(32)(7)(3)(28)(53)(106)(68)君,已阅读到文档的结尾了呢~~
基于ncc系统的数据库中间件设计与应用,数据库中间件,数据库中间件有哪些,数据库访问中间件,数据库应用系统,数据库管理系统,数据库系统,数据库系统概论,数据库系统工程师,数据库系统概念
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于ncc系统的数据库中间件设计与应用
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口2012年12月 总版技术专家分月排行榜第一2012年10月 总版技术专家分月排行榜第一2012年9月 总版技术专家分月排行榜第一2012年8月 总版技术专家分月排行榜第一
2012年11月 总版技术专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 mfc socket 例子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信