孙海民的windows sockets网络开发第五章源码一个问题

温水煮青蛙come-on 2012-10-27 03:35:47
//连接服务器
if (ConnectServer())
{
ShowConnectMsg(TRUE);
}else{
ShowConnectMsg(FALSE);
ExitClient();
return CLIENT_SETUP_FAIL;
}
这段是客户端的一部分代码。
环境VS2005+XP+SP3
问题:ctrl+F5 运行就进入else部分。加断点,单步执行进入ConnectServer()函数内,
再继续运行就进入if部分。为什么呢??试了好几遍了。。每次都这样
...全文
146 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]
太快了,这个是非阻塞的。第一次connect返回 -1,马上执行第二次,但是第一次还在等待

int nErrCode = WSAGetLastError();
if( WSAEWOULDBLOCK == nErrCode ||//连接还没有完成
WSAEINVAL == nErrCode ||WSAEALREADY==nErrCode)
{
continue;
}else if (……
[/Quote]么么。
你太帅了。竟然提前把我问的给回答了
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
把这个排除掉就可以了。

……
[/Quote]
谢谢。。
再问两个问题,行不~~
1.设置非阻塞模式的错误怎么会在这儿取得呢?

2.你是怎么发现这个错误的
这不是鸭头 2012-10-27
  • 打赏
  • 举报
回复
太快了,这个是非阻塞的。第一次connect返回 -1,马上执行第二次,但是第一次还在等待

int nErrCode = WSAGetLastError();
if( WSAEWOULDBLOCK == nErrCode ||//连接还没有完成
WSAEINVAL == nErrCode ||WSAEALREADY==nErrCode)

{
continue;
}else if (WSAEISCONN == nErrCode)//连接已经完成
{
break;
}else //其它原因,连接失败
{
//printf("%d",nErrCode);
return FALSE;
}
这不是鸭头 2012-10-27
  • 打赏
  • 举报
回复
把这个排除掉就可以了。
			int nErrCode = WSAGetLastError();
if( WSAEWOULDBLOCK == nErrCode ||//连接还没有完成
WSAEINVAL == nErrCode)
{
continue;
}else if (WSAEISCONN == nErrCode)//连接已经完成
{
break;
}else if(nErrCode!=10037)//其它原因,连接失败
{
return FALSE;
}
这不是鸭头 2012-10-27
  • 打赏
  • 举报
回复
	//设置套接字非阻塞模式
unsigned long ul = 1;
reVal = ioctlsocket(sClient, FIONBIO, (unsigned long*)&ul);
if (reVal == SOCKET_ERROR)
return FALSE;


这个的原因,返回的错误码是10037


  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
能不能把工程文件传上来?好直接给你调试看看。
[/Quote]擦。设分了。等我改下
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
能不能把工程文件传上来?好直接给你调试看看。
[/Quote]我把源码全传了
http://download.csdn.net/detail/mwj_88/4693238
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
能不能把工程文件传上来?好直接给你调试看看。
[/Quote]正在传~==
这不是鸭头 2012-10-27
  • 打赏
  • 举报
回复
能不能把工程文件传上来?好直接给你调试看看。
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
就是会不会从某个文件中读取ip地址,端口等等这类的信息
[/Quote]没有。全部#define 在文件开头位置
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
特别是如果有配置文件参数这类的东西。
[/Quote]没有配置文件参数----书中没提。
就算有配置文件参数,直接运行也会调用到吧?
这不是鸭头 2012-10-27
  • 打赏
  • 举报
回复
就是会不会从某个文件中读取ip地址,端口等等这类的信息
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
是不是还依赖别的文件,直接运行的时候如果依赖其他文件时,是找debug文件夹下面的
调试的时候是中工程文件下面的
[/Quote]这个算依赖吗??
#include "stdafx.h"
#include <string.h>
#include <assert.h>
#include <iostream>
#include <winsock2.h>
#include <process.h>
怎么叫依赖呢?
这不是鸭头 2012-10-27
  • 打赏
  • 举报
回复
特别是如果有配置文件参数这类的东西。
这不是鸭头 2012-10-27
  • 打赏
  • 举报
回复
是不是还依赖别的文件,直接运行的时候如果依赖其他文件时,是找debug文件夹下面的
调试的时候是中工程文件下面的
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
重新编译
[/Quote]clean build 、rebuild 都用了~还是不行
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
调试时,是用的debug版本吗?孙海民给的库.lib是用的debug版本吗?检查一下,要保持一致,要么全debug,要么全release,才能调试正常。
[/Quote]调试是debug。ctrl+F5也是debug。
用到的lib库只有#pragma comment(lib,"ws2_32.lib")
怎么看这个库是不是debug版本?
这不是鸭头 2012-10-27
  • 打赏
  • 举报
回复
重新编译
无趣 2012-10-27
  • 打赏
  • 举报
回复
调试时,是用的debug版本吗?孙海民给的库.lib是用的debug版本吗?检查一下,要保持一致,要么全debug,要么全release,才能调试正常。
  • 打赏
  • 举报
回复
难道我真的有必要骗人么

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧