如何同时使用两个SOCKET
各位大侠帮忙看看下面的代码,实质就是两个SOCKET同时通信的问题,框架是一个基于对话框的程序。
void MyInit()
{
serv.sin_addr.s_addr=htonl(INADDR_ANY);
serv.sin_family=AF_INET;
serv.sin_port=5000;//htons(5000);
addlen=sizeof(serv);
//创建socket
sock=socket(AF_INET,SOCK_STREAM,0);
//绑定
if (bind(sock,(sockaddr*)&serv,addlen))
{
MessageBox("绑定错误");
}
else
{
//开始侦听
listen(sock,5);
//调用线程
AfxBeginThread(&thread,0);
}
}
UINT thread(LPVOID p)
{
char buff[100];
CString temp,temp1("Start");
Display *dlg=(Display*)AfxGetApp()->GetMainWnd();
dlg->sersock=accept(dlg->sock,(sockaddr*)&(dlg->serv),&(dlg->addlen));
if (dlg->sersock==INVALID_SOCKET)
{
AfxMessageBox("INVALID_SOCKET");
}
else
{
int result=1;
while(result!=SOCKET_ERROR)
{
result=recv(dlg->sersock,buff,100,0);
if (result!=SOCKET_ERROR)
{
temp=buff;
if(temp == temp1)
fun1();//全局函数
}
}
}
closesocket(dlg->sersock);
AfxEndThread(0);
return 0;
}
void fun1()
{
int i=0;
sockaddr_in cli;
SOCKET clisock;
cli.sin_addr.s_addr=inet_addr("198.118.60.45");
cli.sin_family=AF_INET;
cli.sin_port=1051;//htons(5000);
clisock=socket(AF_INET,SOCK_STREAM,0);
while(connect(clisock,(sockaddr*)&(cli),sizeof(cli)))
{
if(i==5)
{
AfxMessageBox("不能连接到服务器");
return;
}
++i;
}
}
想作的这个程序本身既是服务器又是客户端,测试的时候是通过另外的一个程序先连接这个程序发出Start的指令,然后本程序去连接另外的一个服务器A(已经处于启动的状态)。为什么连接不上A啊?如果不等待指令而是直接去连A则成功,原因是什么?