我用CSocket类时,每次客户端向服务器端连接时,第一次connect成功,第二次connect总是返回WSAEADDRINUSE错误,不知那位高手能帮我解决?? 是否设置了Listen的参数>1。Listen( 5 ); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对呀,参数默认值就是5。下面是我的代码服务器 suc=socket.Create(8000,SOCK_STREAM,LocalIP); suc=socket.Listen(); //accept CSocket msgsock[6]; int ret; BOOL End=false; while(!End) { if(socket.Accept(msgsock)==0) { err=GetLastError(); socket.Close(); return; } ... ret=msgsock.Receive(buffer,1024); ... msgsock.Close(); } socket.Close();客户端 suc=socket.Create(8001,SOCK_STREAM,LocalIP); if(suc==0) { err=GetLastError(); return; } //connect suc=socket.Connect(ip,8000); if(suc==0) { err=GetLastError(); return; } //send int ret; ret=socket.Send(buffer,sizeof(buffer)); if(ret==SOCKET_ERROR) { socket.Close(); return; } //closesocket closesocket(Socket); 1。第一次connect成功没有关闭Scoket.用完要关闭!2。可以在CSocket中将IP设为可共用,也可解决问题。 错误所在if(socket.Accept(msgsock)==0)应该为if(socket.Accept(msgsock[no])==0)否则你永远使用msgsock[0] 来应答 你不应将 ... ret=msgsock.Receive(buffer,1024); ... msgsock.Close();放在while中,如果你这其中的代码没有完成,就不会回去再执行socket.Accept了!! 1。我得socket已经关闭了呀2。请问怎么在CSocket中将IP设为可共用 客户端的程序关闭socket改成socket.Close()可是问题还是一样 to:guostong(笨驴) 我在第二次用msgsock之前已经把msgsock.Close()难道不行么?to:SeaBirds(SeaBird) 我跟踪 ... ret=msgsock.Receive(buffer,1024); ... msgsock.Close(); 之间的代码都已经完成了呀。如果不放在循环中我怎么知道为是否已经连接上了呀。 liuchunpeng(悟衍) 没错1。第一次connect成功没有关闭Scoket.用完要关闭!客户端 suc=socket.Create(8001,SOCK_STREAM,LocalIP); if(suc==0) { err=GetLastError(); return; } //connect suc=socket.Connect(ip,8000); if(suc==0) { err=GetLastError(); socket.close(); return; } 可是我在最后已经加上socket.close()问题还是有呀。还请大家帮帮忙 错误在:suc=socket.Create(8001,SOCK_STREAM,LocalIP); 中的8001,将他改为: suc=socket.Create(0,SOCK_STREAM,LocalIP);就OK了!!替代方法: 每一次使用后先CLOSE他,然后在CREATE、CONNECT一次,但是这样做效率底!!! to:Sunny_lin(大和尚) 您的第一种方法解决了我的问题。可是我觉得我用的就是您说的第二种方法呀,为什么不行哪 文档类串行化的问题 VC++问题:当我点击了对话框上的按钮时,CVIEW如何感知这个事件?? win32例程窗口显示不出来 IPicture中Render的用法 还是老毛病(CCombobox) dll参数传递问题 同一工程几个不同的对话框类中的变量名可以相同吗?如果可以,那出错在哪里呢? 小弟想学一门语言不知学VC还是JAVE好! 我想做个Active服务端的ADO控件. 如何在VC++6.0中实现数值型与字符串(CString)的转换(类似于Basic中的Val,Str$)多谢 急问:在程序中如何立即停止屏保? 超初级问题(首次发言,只有10分,但问题狂简单)
下面是我的代码
服务器
suc=socket.Create(8000,SOCK_STREAM,LocalIP);
suc=socket.Listen();
//accept
CSocket msgsock[6];
int ret;
BOOL End=false;
while(!End)
{
if(socket.Accept(msgsock)==0)
{
err=GetLastError();
socket.Close();
return;
}
...
ret=msgsock.Receive(buffer,1024);
...
msgsock.Close();
}
socket.Close();
客户端
suc=socket.Create(8001,SOCK_STREAM,LocalIP);
if(suc==0)
{
err=GetLastError();
return;
}
//connect
suc=socket.Connect(ip,8000);
if(suc==0)
{
err=GetLastError();
return;
} //send
int ret;
ret=socket.Send(buffer,sizeof(buffer));
if(ret==SOCKET_ERROR)
{
socket.Close();
return;
}
//closesocket
closesocket(Socket);
2。可以在CSocket中将IP设为可共用,也可解决问题。
应该为if(socket.Accept(msgsock[no])==0)否则你永远使用msgsock[0] 来应答
...
ret=msgsock.Receive(buffer,1024);
...
msgsock.Close();
放在while中,如果你这其中的代码没有完成,就不会回去再执行
socket.Accept了!!
2。请问怎么在CSocket中将IP设为可共用
我在第二次用msgsock之前已经把msgsock.Close()难道不行么?
to:SeaBirds(SeaBird)
我跟踪
...
ret=msgsock.Receive(buffer,1024);
...
msgsock.Close();
之间的代码都已经完成了呀。如果不放在循环中我怎么知道为是否已经连接上了呀。
客户端
suc=socket.Create(8001,SOCK_STREAM,LocalIP);
if(suc==0)
{
err=GetLastError();
return;
}
//connect
suc=socket.Connect(ip,8000);
if(suc==0)
{
err=GetLastError();
socket.close();
return;
}
还请大家帮帮忙
suc=socket.Create(8001,SOCK_STREAM,LocalIP);
中的8001,将他改为:
suc=socket.Create(0,SOCK_STREAM,LocalIP);就OK了!!替代方法:
每一次使用后先CLOSE他,然后在CREATE、CONNECT一次,但是这样做效率底!!!
您的第一种方法解决了我的问题。
可是我觉得我用的就是您说的第二种方法呀,为什么不行哪