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;
}
...全文
1325 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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

18,363

社区成员

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

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