关于socket错误10061

cxs_ch 2012-08-09 03:37:03
大家好:
我想用两个线程各自创建一个socket,分别和两个进程通信,主线程创建的是服务器端socket,线程A是负责和进程A通信的socket。测试了下,主线程的socket和客户端通信没有问题,而线程A不能和进程A创建连接,总是返回错误10061,好像通过一次。不知道是怎么回事,进程A是另一个服务器,我用其他客户端和A服务器通信是没有问题的,请问是什么原因?多谢。
DWORD WINAPI child(LPVOID lpParameter)
{
int opt=SO_REUSEADDR;
char tempbuff[MAXDATASIZE];
my_addr.sin_addr.S_un.S_addr=inet_addr("192.168.4.83");
my_addr.sin_family=AF_INET;
my_addr.sin_port=(PORTA);
if((mysockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
cerr<<"create socket failed!"<<endl;
return -1;
}
setsockopt(mysockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&opt,sizeof(opt));
if(connect(mysockfd,(sockaddr*)&my_addr,sizeof(my_addr))==-1)
{
cerr<<"connect to server failed!"<<GetLastError()<<endl;
return -1;
}
memset(&tempbuff,'\0',MAXDATASIZE);
send(mysockfd,recvbuf,strlen(recvbuf),0);
recv(mysockfd,recvbuf,MAXDATASIZE,0);
return 0;
}
调试的时候,每次都是运行到if(connect...)这一句,就返回了,刚接触这个,望不吝赐教!
...全文
2995 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZhangBoWen999 2013-07-02
  • 打赏
  • 举报
回复
遇到相似的问题,顶一下、
cxs_ch 2012-08-10
  • 打赏
  • 举报
回复
我这样写出来,A进程能够调出来,但是一调出来 就返回10061错误~
cxs_ch 2012-08-10
  • 打赏
  • 举报
回复
很奇怪的现象,我把三个进程里面的debug EXE文件拷贝出来,分别执行。有几次能成功,有几次却仍然发生10061错误。我现在希望能够在主进程里面,自动创建进程去调用进程A,我是这么想的:服务器端接收到连接,就创建一个线程,在这个线程里面创建进程A,同时创建一个和该进程通信并处理数据的线程。不知道这样的思路是否有问题?

if((connectfd=accept(listenfd,(sockaddr*)&clt_addr,&addrlen))==-1)
{
cerr<<"connect failed!"<<GetLastError()<<endl;
return -1;
}
HANDLE Thandle=CreateThread(NULL,NULL,&CreateProc,NULL,NULL,NULL);

DWORD WINAPI CreateProc(LPVOID lpParameter)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset( &si, 0,sizeof(si) );
si.cb = sizeof(si);
memset( &pi, 0,sizeof(pi) );
TCHAR fname[]=TEXT("E:\\My project\\20120810\\Child\\child\\Debug\\child.exe");
if( !CreateProcess( NULL,fname,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
cout<<"CreateProcess failed"<<GetLastError();
return 0;
}
else
CreateThread(NULL,NULL,&child,NULL,NULL,NULL);

DWORD WINAPI child(LPVOID lpParameter)
{
int opt=SO_REUSEADDR;
char tempbuff[MAXDATASIZE];
my_addr.sin_addr.S_un.S_addr=inet_addr("192.168.4.83");
my_addr.sin_family=AF_INET;
my_addr.sin_port=(PORTA);
if((mysockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
cerr<<"create socket failed!"<<endl;
return -1;
}
setsockopt(mysockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&opt,sizeof(opt));
if(connect(mysockfd,(sockaddr*)&my_addr,sizeof(my_addr))==-1)

麻烦帮忙看下,多谢
翅膀又硬了 2012-08-09
  • 打赏
  • 举报
回复
防火墙之类的关了试试。
翅膀又硬了 2012-08-09
  • 打赏
  • 举报
回复
由于目标机器积极拒绝,无法连接。

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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