关于网友提出的“ 远程反向链接,问题”问题疑问,本网通过在网上对“ 远程反向链接,问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 远程反向链接,问题
描述: 我写了一个粗糙的远程控制,是通过的服务端主动连接客户端,客户端监听,接受等,看看下面代码,是客户端的,服务端没问题的
SOCKET s;
//=======================监听线程
DWORD WINAPI ListenThread(LPVOID lpvoid)
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,1), &WSAData);
SOCKADDR_IN saddr;
s=socket(AF_INET,SOCK_STREAM,0);
CClientDlg *Dlg = (CClientDlg*)AfxGetApp()->m_pMainWnd;
if(s==SOCKET_ERROR)
{
AfxMessageBox("意外错误");
}
char sporttem[50];
char sporttem0[50];
sprintf(sporttem,"监听本地端口%d成功",sport);
sprintf(sporttem0,"监听本地端口%d失败",sport);
saddr.sin_family=AF_INET;
saddr.sin_addr.S_un.S_addr=INADDR_ANY;
saddr.sin_port=htons(sport);
int nRet;
if(SOCKET_ERROR != bind(s, (LPSOCKADDR)&saddr, sizeof(saddr)))
{
nRet=listen(s,1);
}
if(nRet == SOCKET_ERROR)
{
AfxMessageBox("监听端口失败,请检查网络连接,或者端口是否被占用");
return FALSE;
}
Dlg->addlog(sporttem);
CreateThread(NULL,NULL,whileaceept,NULL,NULL,NULL);
return 1;
}
//========================
DWORD WINAPI whileaceept(LPVOID lpvoid)
{
SOCKET ss=s;
while(1)
{
SOCKET SerSock;
SOCKADDR_IN Seraddr;
int Seraddrsize=sizeof(Seraddr);
SerSock = accept(ss,(sockaddr *)&Seraddr,&Seraddrsize);
if(SerSock!=INVALID_SOCKET)
{
AcceptHost(SerSock,Seraddr);
}
}
return 0;
}
就是这样的,服务端成功连接后,主机就会在listctrl上增加一个item, 如果自己测试,完全没问题,但是一旦服务端数量多了,连接,有时候服务端上线
几十台,然后卡住了,就不动了,或者就是过个几十秒突然又增加了很多主机,我自己在中间连接时候,服务端是连接上的,但是客户端上面没有
我自己机器的连接,服务端数量少没什么问题,主要是数量多了之后,出现非常多的问题,最主要的是很多服务端无法连接到客户端,中间很多主机的连接
被丢失了
以上介绍了“ 远程反向链接,问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3114708.html