10004错误!!

tujj99 2004-01-10 02:26:51
大家帮忙看看我的程序,为什么总是出现10004错误啊!!
谢谢了!!高分送英雄!

client socket closed or error:10054
GetCliReqThread()[1664] exit....error line=181
client socket closed or error:10004
ProcCliReqThread() exit [1800]....error line =71
client socket closed or error:10004
ProcCliReqThread() exit [1668]....error line =71
ProcCliReqThread() exit [1668]....error line =71
client socket closed or error:10004
ProcCliReqThread() exit [1668]....error line =71
client socket closed or error:10004
client socket closed or error:10004
ProcCliReqThread() exit [1720]....error line =71
ProcCliReqThread() exit [1720]....error line =71
client socket closed or error:10004
ProcCliReqThread() exit [1752]....error line =71


DWORD WINAPI ProcCliReqThread(LPVOID lpParam)
{
SOCKET cli_socket, /* 客户端SOCKET */
pro_socket; /* Proxy socket*/
int n; /* 接受到的或发送的数据的字节数*/
char msg[MSG_SIZE]; /* 缓冲区*/
int errorno, nLeft, idx;

//debug only
int errcode;

CRITICAL_SECTION csprosock;
CRITICAL_SECTION csclisock;

tClientIP ClientIP;

ClientIP = *((tClientIP *)lpParam);
cli_socket = ClientIP.cli_socket;
pro_socket = ClientIP.pro_socket;
csprosock = *ClientIP.csprosock;
csclisock = *ClientIP.csclisock;

while(1)
{
/* 从代理服务器接收消息*/
ZeroMemory(msg,sizeof(msg));
EnterCriticalSection(&csprosock);
n = recv(pro_socket,msg,MSG_SIZE,0);
LeaveCriticalSection(&csprosock);
if( n > 0){
printf("[%d]:S[%-16s:%-5d] << P[%-16s:%-5d] [%d]\n",
GetCurrentThreadId(),server_addr,server_port,proxy_addr,proxy_port,n);
}
else if(n == 0) {
errcode = 67;
break;
}
else if(n == SOCKET_ERROR){
errcode = 71;
errorno = WSAGetLastError();
printf("client socket closed or error:%d\n",errorno);
break;
}

/* 返回数据给客户端 */
nLeft = n;
idx = 0;
while(nLeft > 0)
{
EnterCriticalSection(&csclisock);
n = send(cli_socket,&msg[idx],nLeft,0);
LeaveCriticalSection(&csclisock);
if( n > 0){
printf("[%d]:C[%-16s:%-5d] << S[%-16s:%-5d] [%d]\n",
GetCurrentThreadId(),ClientIP.ip,ClientIP.port,server_addr,server_port,n);
}
else if(n == SOCKET_ERROR){
errcode = 88;
errorno = WSAGetLastError();
printf("client socket closed or error:%d\n",errorno);
break;
}
nLeft -= n;
}
if(n == SOCKET_ERROR){
errcode = 96;
errorno = WSAGetLastError();
printf("client socket closed or error:%d\n",errorno);
break;
}
}
printf("ProcCliReqThread() exit [%d]....error line =%d\n",GetCurrentThreadId(),errcode);
return 1;
}
...全文
1267 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fzd999 2004-01-10
  • 打赏
  • 举报
回复
呵呵,这方面我真没什么经验,我主要做的是系统工具开发
tujj99 2004-01-10
  • 打赏
  • 举报
回复
fzd9999:
不知道你对proxy program的编写有没有心得,我现在想问你一些问题!
fzd999 2004-01-10
  • 打赏
  • 举报
回复
可能可以,你试一下吧
tujj99 2004-01-10
  • 打赏
  • 举报
回复
memcpy(&ClientIP,(tClientIP *)lpParam,sizeof(tClientIP));
可以吗
fzd999 2004-01-10
  • 打赏
  • 举报
回复
果然,你忘了重载运算符" = ",程序运行到ClientIP = *((tClientIP *)lpParam);的时候,并没有把数据复制过来,不相信你可以加行代码输出看一下。

两种办法,一种是按我刚才说的tClientIP *ClientIP,进行指针操作。另一种是重载运算符 =
tujj99 2004-01-10
  • 打赏
  • 举报
回复
typedef struct tClientIP_
{
char ip[16];
unsigned short port;
SOCKET cli_socket,pro_socket;
CRITICAL_SECTION *csprosock,*csclisock;
int reserve;
}tClientIP;
fzd999 2004-01-10
  • 打赏
  • 举报
回复
ps,能看看你 tClientIP 的定义吗?
fzd999 2004-01-10
  • 打赏
  • 举报
回复
线程回调函数

1 tClientIP ClientIP; // 最好使用tClientIP *ClientIP,进行指针操作,原因是不知道
// tClientIP是否重载了运算符" = ".

2 你用的是WinSock2.2还是WinSock1.1,如果是1.1版本的,看一下哪里调用了
WSACancelBlockingCall
tujj99 2004-01-10
  • 打赏
  • 举报
回复
没有人吗?
tujj99 2004-01-10
  • 打赏
  • 举报
回复
自己up
本OCX提供以上3个接口 1,登录到上海移动网关(EP请求连接到ESMP(EMPP_CONNECT)操作) 接口函数:long ConnectServer(LPCTSTR strUserName, LPCTSTR strPassWord) 功能说明:用户只需输入EMPP协议用户名和密码调用此函数即可连接到上海移动网关. 参数说明:strUserName--用户名。strPassWord--用户密码 返回值: 0:正确 1:消息结构错 2:非法源地址 3:认证错 4:版本不匹配 5~ :其他错误 10001:已经达到该企业登录的最大登录数,目前只允许每家企业同时用10个帐号登录 2,发送短信操作(EP向ESMP提交短信(EMPP_SUBMIT)操作) 接口函数:long SendSms(LPCTSTR strSmsText, LPCTSTR strPhoneNumber) 功能说明:调用ConnectServer连接成功后便可以调用此函数发送短信。 参数说明:strSmsText,信息内容,最多60个汉字(上海移动现在最长发60个字) strPhoneNumber,接收号码,用英文逗号分隔,最多可以发4个号码.例如“13888888888,13666666666,13999999999,13555555555” 返回值: 0:正确; 1:消息结构错; 2:命令字错; 3:消息序号重复; 4:消息长度错; 5:资费代码错; 6:超过最大信息长; 7:业务代码错; 8:流量控制错; 9:短信网关不负责服务此计费号码; 10:Src_Id错误; 11:Msg_src错误; 12:Fee_terminal_Id错误; 13:Dest_terminal_Id错误; 14:双重认证错 10001:收信方号码为黑名单用户;10002:短信内容中包含敏感字,该短信被拒发 10003:提供给该试用企业的短信发送量已用完,系统停止对其的短信发送服务 10004:超过允许发给该用户的最大发信频率(对此类型错误,客户端可延时一段时间后重试短信发送) 10005:服务忙,请稍后再发短信(对此类型错误,客户端可延时一段时间后重试短信发送) 10006:向网关发送短信失败(对此类型错误,客户端可延时一段时间后重试短信发送)10007:该用户没有群发权限,不能给两人以上发送短信 3,接收短信(ESMP向EP送交短信(EMPP_DELIVER)操作),此接口为事件,接收到短信后出发该事件 接口函数:void OnReceiveSms(BSTR strPhoneNumber, BSTR strSmsText); 功能说明:接收短信事件 参数说明:strPhoneNumber上行号码 strSmsText,信息内容 使用流程:先调用ConnectServer建立与服务器的连接(EMPP_CONNECT),然后就可以循环调用SendSms进行发短信操作(EMPP_SUBMIT),以及在接收短信事件中处理接收短信(EMPP_DELIVER) 我的QQ:346263509 邮箱:huke1987@qq.com欢迎大家一起交流讨论上海移动的EMPP协议 说明,本控件限制了只能发送500条。

18,356

社区成员

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

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