各位大哥,请教完成端口问题 兄弟我刚接触网络编程,只是写过一些锁定状态下的C/S小程序,现在正在看完成端口这一块,感觉不好理解。现在对于做一个完成端口的程序没有什么思想。大伙可否给我发一个简单一点的完成端口的例子,参考一下。另外,能把大家做完成端口程序的过程给我讲一下吗?多多谢!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.csdn.net/develop/Article/15/15211.shtm 各位朋友:我看了〈windows网络编程〉里的例子,然后写了一个client端做测试,发现有一些问题。问题如下:(1)启动书里那个server例子,运行client端,server端显示:Socket number 104 connectedWSARecv() failed with error 10054client端得到希望得到的结果。(2)启动server,单步跟踪client端程序,得到相应的结果后,结束程序,在server端得到的结果是:Socket number 104 connectedGetQueuedCompletionStatus failed with error 64(3)启动server,单步跟踪多个client,只要不关闭client,server端就没问题。完成端口怎么处理客户端中断连接的问题,你们碰到上面的问题怎么处理?又请教你们了。client端的代码如下:#include <stdio.h>#include <winsock.h>#define bzero(p, l) memset(p, 0, l)#define SERVER "127.0.0.1"#define PORT 5150int main( ){ int sockfd,n; struct sockaddr_in ser_addr; char sends[] = {"hello world!"}; char recvs[1024]; WSADATA wsadata; WSAStartup(MAKEWORD(2,2), &wsadata); memset(&ser_addr,0,sizeof(ser_addr)); ser_addr.sin_family = AF_INET; ser_addr.sin_addr.s_addr = inet_addr(SERVER); ser_addr.sin_port = htons(PORT); sockfd=socket(AF_INET,SOCK_STREAM,0); if (sockfd<0) { printf("0x%x:%d error\n",ntohl(ser_addr.sin_addr.s_addr),ntohs(ser_addr.sin_port)); exit(1); } if(connect(sockfd,(struct sockaddr*)&ser_addr,sizeof(ser_addr))<0){ printf("connect error\n"); exit(1); } printf("connected\n"); if(send(sockfd,sends,strlen(sends),0)<0){ printf("Send error!\n"); exit(0); } printf("Send ok!\n"); if((n=recv(sockfd,recvs,1024,0))==0) { printf("read error!\n"); } recvs[n]=0; printf("read ok!\n %s\n",recvs); printf("read ok!\n %s\n",recvs); // WSACleanup();}那本书上的例子你们都看过吧,我就不在写了,你们快来看看吧,怎么办? to:小辉客户端一执行完就退出了,所以链接就断开,我明白。我的问题是难道服务器端就不能处理客户端异常断开的问题?服务器应该对应多个客户端,总不能有一个异常断开后就不能处理别的请求了吧。如果能处理,应该怎么办?对了,以前看过您的帖子,知道您曾经做过完成端口的程序,正好我现在想做一个网吧管理的程序,服务器端就想采用完成端口技术,能不能把源码发过来给俺参考一下。多多谢!!![email protected]to:山野白菜在这里发一个链接吧! FTP出问题了,已经给你发过去了 我做的是双线通讯:两个dll,两个调试应用程序,双线通讯(两条线连接)也是参照http://www.codeproject.com/internet/winsockiocp.asp做的。 to 山野白菜没收到啊,麻烦你试一下另一个邮箱,[email protected]to 小辉双线通讯,我这里可能没有测试环境,不过你把你写的代码给我发过来,我看一下你那里用到完成端口的部分是怎么做的就可以了。 见http://expert.csdn.net/Expert/TopicView1.asp?id=1184989 mfc GDI 不同类之间的调用的问题 VC定义解释 TCP数据包的问题 怎样随着对话框的大小变化改变窗口上控件的位置 编写聊天室这类软件一般用哪些控件来实现呢? CTabCtrl控件Tab页改变对应的消息是什么? 有关程序设计方法的问题! 自定义事件 我的应用程序在连接时找不到main 入口,为何?(在线高分相送) 怎么才能消除按钮快速移动产生的闪烁啊 Win32标准dll,VB下调用问题 救命呀,出现内存不足 ,我出1000分
我看了〈windows网络编程〉里的例子,然后写了一个client端做测试,发现有一些问题。问题如下:
(1)启动书里那个server例子,运行client端,server端显示:
Socket number 104 connected
WSARecv() failed with error 10054
client端得到希望得到的结果。
(2)启动server,单步跟踪client端程序,得到相应的结果后,结束程序,在server端得到的结果是:
Socket number 104 connected
GetQueuedCompletionStatus failed with error 64
(3)启动server,单步跟踪多个client,只要不关闭client,server端就没问题。
完成端口怎么处理客户端中断连接的问题,你们碰到上面的问题怎么处理?又请教你们了。
client端的代码如下:
#include <stdio.h>
#include <winsock.h>
#define bzero(p, l) memset(p, 0, l)
#define SERVER "127.0.0.1"
#define PORT 5150
int main( )
{
int sockfd,n;
struct sockaddr_in ser_addr;
char sends[] = {"hello world!"};
char recvs[1024];
WSADATA wsadata;
WSAStartup(MAKEWORD(2,2), &wsadata);
memset(&ser_addr,0,sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = inet_addr(SERVER);
ser_addr.sin_port = htons(PORT);
sockfd=socket(AF_INET,SOCK_STREAM,0);
if (sockfd<0) {
printf("0x%x:%d error\n",ntohl(ser_addr.sin_addr.s_addr),ntohs(ser_addr.sin_port));
exit(1);
}
if(connect(sockfd,(struct sockaddr*)&ser_addr,sizeof(ser_addr))<0){
printf("connect error\n");
exit(1);
}
printf("connected\n");
if(send(sockfd,sends,strlen(sends),0)<0){
printf("Send error!\n");
exit(0);
}
printf("Send ok!\n");
if((n=recv(sockfd,recvs,1024,0))==0) {
printf("read error!\n");
}
recvs[n]=0;
printf("read ok!\n %s\n",recvs);
printf("read ok!\n %s\n",recvs);
// WSACleanup();
}
那本书上的例子你们都看过吧,我就不在写了,你们快来看看吧,怎么办?
客户端一执行完就退出了,所以链接就断开,我明白。我的问题是难道服务器端就不能处理客户端异常断开的问题?服务器应该对应多个客户端,总不能有一个异常断开后就不能处理别的请求了吧。如果能处理,应该怎么办?对了,以前看过您的帖子,知道您曾经做过完成端口的程序,正好我现在想做一个网吧管理的程序,服务器端就想采用完成端口技术,能不能把源码发过来给俺参考一下。多多谢!!!
[email protected]
to:山野白菜
在这里发一个链接吧!
也是参照http://www.codeproject.com/internet/winsockiocp.asp做的。
没收到啊,麻烦你试一下另一个邮箱,[email protected]
to 小辉
双线通讯,我这里可能没有测试环境,不过你把你写的代码给我发过来,我看一下你那里用到完成端口的部分是怎么做的就可以了。