- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
windows socket io模型之阻塞模式(windows socket io模型之阻塞模式)
windows socket io模型之阻塞模式(windows socket io模型之阻塞模式)
#包括 Winsock2。H
#包括 ws2tcpip。H
#包括“解决。”
#包括“公众。”
single_list_header buffheader typedef;
typedef struct _connection_obj
{
套接字;/客户机套接字
处理hrecvsema;/ /信号量递增,每个接收
buffheader buff;
} connection_obj;
挥长gconnectedclients = 0;
connection_obj * getconnectobj(套接字){
connection_obj * newobj = null;
newobj =(connection_obj HeapAlloc(*)GetProcessHeap(),heap_zero_memory,sizeof(connection_obj));
如果(newobj = = null){
fprintf(stderr,“HeapAlloc失败。\n”);
是(1);
}
newobj - S = S;
newobj - hrecvsema = CreateSemaphore(null,0,0x0fffffff,null);
如果(newobj - hrecvsema = = null){
fprintf(stderr,“createsimaphore失败。\n”);
是(1);
}
newobj - buff。头= newobj - buff。尾=空;
InitializeCriticalSection(与newobj - buff。sendrecvqueuecritsec);
返回newobj;
}
无效的FreeConnectionObj(connection_obj * OBJ){
(与目标- BUFF删除临界部分否是是。sendrecvqueuecritsec);
HeapFree(GetProcessHeap)、0(obj);
}
DWORD WINAPI receivethread(LPVOID可){
connection_obj * connobj = null;
buffer_obj * buffobj = null;
int RC;
connobj =(connection_obj *)可;
如果(gprotocol = = ipproto_tcp){
当(真){
buffobj = getbufferobj(gbuffersize);
RC = recv(connobj -,buffobj - buf,buffobj -缓冲区长度,0);
buffobj -缓冲区长度=钢筋混凝土;
EnqueueBufferObj(与connobj - BUFF,(buffobj -下));
释放信号量对象否是是(connobj - hrecvsema,1,null);
如果(RC = = 0 | | RC = = socket_error){
打破;
}如果(RC)!= socket_error){
printf(“读字节:%d\n”,RC);
}
}
}
是(0);
返回0;
}
DWORD WINAPI sendthread(LPVOID可){
connection_obj * connobj = null;
buffer_obj * buffobj = null;
int RC,
nleft,
IDX;
single_list *块;
connobj =(connection_obj *)可;
当(真){
RC = WaitForSingleObject(connobj - hrecvsema,无限);
如果((RC = = wait_failed)| |(RC = = wait_timeout)){
fprintf(stderr,发送线程失败。\n”);
是(1);
}
块= dequeuebufferobj(与connobj - buff);
如果(块= NULL)
是(1);
buffobj =(buffer_obj *)container_of(buffer_obj,接下来,块);
如果(((gprotocol = = ipproto_tcp)(buffobj -缓冲区长度= = 0))| |(buffobj -缓冲区长度= = socket_error)){
FreeBufferObj(buffobj);
buffobj = null;
打破;
}
如果(gprotocol = = ipproto_tcp){
nleft = buffobj -缓冲区长度;
IDX = 0;
而(nleft 0
您可能关注的文档
- ps 绘制青苹果 操作方法(PS rendering Green Apple operating methods).doc
- ps 水滴的制作方法(Method for making PS droplets).doc
- ps 的精髓(The essence of PS).doc
- ps7.23(ps7.23).doc
- pn码同步原理(Synchronization principle of PN code).doc
- ps后期处理 唐婉老师调色图文教程_风的_20150303_214748(PS post processing teacher Tang Wan color graphic tutorials _ wind _20150303_214748).doc
- ps图层的42个技巧(42 techniques for the PS layer).doc
- ps学习 文本文档(PS learning text documents).doc
- ps制作魔兽界面(PS make Warcraft interface).doc
- ps小呆笔记(PS little note taking).doc
- windows xp蓝屏代码大全(Windows XP blue screen code Daquan).doc
- windowsxp美化扫盲(WindowsXP landscaping literacy).doc
- windows出错信息解析及解决方案秘籍(Windows error information analysis and solution cheats).doc
- windows同步(Windows synchronization).doc
- windows常见错误代码解析和解决办法(Windows common error code analysis and Solutions).doc
- windows程序员如何转向linux开发应用(Windows programmers how to shift the development and application of Linux).doc
- windows系统进程全解剖(Windows system process complete anatomy).doc
- windows组策略之软件限制策略(Windows group policy's software restriction policy).doc
- windows蓝屏错误代码解析(Windows blue screen error code analysis).doc
- windows软件限制策略哈希规则(Windows software, restriction policy, hash rule).doc
文档评论(0)