这是我一个线程函数里的代码:
__try{
SOCKADDR_IN target;
target.sin_family = AF_INET;
target.sin_port = htons (PORT);
target.sin_addr.s_addr = htonl(i);
mysocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(mysocket == INVALID_SOCKET){
__leave;
}//设置socket为非阻塞模式,ul=1.
iErr = ioctlsocket(mysocket,FIONBIO,(unsigned long*)&ul);
if(iErr == SOCKET_ERROR)
__leave;
connect(mysocket,(struct sockaddr *)&target,sizeof(target));
FD_ZERO(&w);
FD_SET(mysocket,&w);
iErr=select(0, 0, &w, 0, &timeout);
if(iErr == SOCKET_ERROR || iErr == 0)//如果不可写,则退出
__leave;
else{//可写则发送数据
iErr = send(mysocket,SendBuff,SendBuffLen,0);
if(iErr == SOCKET_ERROR)
__leave;
}
FD_ZERO(&r);
FD_SET(mysocket,&r);
iErr=select(0, &r, 0, 0, &timeout);
if(iErr == SOCKET_ERROR || iErr == 0){//如果不可读则退出
__leave;
}
else{//可读则接受数据
printf("123");
iErr = recv(mysocket,RecvBuff,RecvBuffLength,0);
if(iErr == SOCKET_ERROR)
__leave;
}
ptr=strstr(RecvBuff,szSign);
if(ptr!=NULL)
printf("response:%s\n",RecvBuff);
}
__finally{
ReleaseSemaphore(hSemaphore,1,&PreviousCount);
closesocket(mysocket);
} 第2次select的时候老是出错,也就是printf("123");老是打不出来,跟的时候明明到了这句话这。
程序的意思就是扫描一个网段的80端口,并发送数据,接受回显,老是出错,别人的源码放我这跑就好好的,基本都是一样 的,为什么我的老错呢?高手帮忙看下。谢谢。
__try{
SOCKADDR_IN target;
target.sin_family = AF_INET;
target.sin_port = htons (PORT);
target.sin_addr.s_addr = htonl(i);
mysocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(mysocket == INVALID_SOCKET){
__leave;
}//设置socket为非阻塞模式,ul=1.
iErr = ioctlsocket(mysocket,FIONBIO,(unsigned long*)&ul);
if(iErr == SOCKET_ERROR)
__leave;
connect(mysocket,(struct sockaddr *)&target,sizeof(target));
FD_ZERO(&w);
FD_SET(mysocket,&w);
iErr=select(0, 0, &w, 0, &timeout);
if(iErr == SOCKET_ERROR || iErr == 0)//如果不可写,则退出
__leave;
else{//可写则发送数据
iErr = send(mysocket,SendBuff,SendBuffLen,0);
if(iErr == SOCKET_ERROR)
__leave;
}
FD_ZERO(&r);
FD_SET(mysocket,&r);
iErr=select(0, &r, 0, 0, &timeout);
if(iErr == SOCKET_ERROR || iErr == 0){//如果不可读则退出
__leave;
}
else{//可读则接受数据
printf("123");
iErr = recv(mysocket,RecvBuff,RecvBuffLength,0);
if(iErr == SOCKET_ERROR)
__leave;
}
ptr=strstr(RecvBuff,szSign);
if(ptr!=NULL)
printf("response:%s\n",RecvBuff);
}
__finally{
ReleaseSemaphore(hSemaphore,1,&PreviousCount);
closesocket(mysocket);
} 第2次select的时候老是出错,也就是printf("123");老是打不出来,跟的时候明明到了这句话这。
程序的意思就是扫描一个网段的80端口,并发送数据,接受回显,老是出错,别人的源码放我这跑就好好的,基本都是一样 的,为什么我的老错呢?高手帮忙看下。谢谢。
解决方案 »
- windows程序设计怎么学啊?
- 有没有做个招聘工作的?想问问招聘有什么要注意的么?(招聘网络开发人员)
- 64位的vista/vs2005如何设置才能调试windows via c/c++中的程序?
- dll调用失败
- 动态数组的内存安全释放问题及使用CArray结构体数组的赋值问题
- 头疼一下午的串口问题!高人帮忙!
- 小妹有一事求各位大虾:AD0调用有返回结果集存储过程;如果存储过程内部有(insert,update)等操作,则调用->GetRecordCount()时报“Oper
- winsock疑问,高手请赐教
- 一个很菜问题。
- 两台电脑之间可以用串口直接通讯吗?即用串口线直接连接两台电脑的串口,可以通讯吗?
- 请大家帮帮忙
- 窗格内切换视图是怎样做出来的?
timeout.tv_sec = 0;
iConnTimeout是从键盘输入的,我设置为2,
另外,在可能出错的地方加入判断,如果出错就GetLastError,并用MessageBox把错误码显示出来。没法直接调试时经常用这种办法。