如何同时使用两个SOCKET

yingkou 2003-12-19 11:44:31
各位大侠帮忙看看下面的代码,实质就是两个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则成功,原因是什么?
...全文
260 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tujj99 2003-12-20
  • 打赏
  • 举报
回复
to jingjing8178(晶晶) :
只须调用一次就可以了!
yingkou 2003-12-19
  • 打赏
  • 举报
回复
每个线程里面都加上了SOCKET的初始化但是还是连接不上
戴晶晶jjyyis 2003-12-19
  • 打赏
  • 举报
回复
每一个线程都需要:WSAStartup(MAKEWORD(2,2),&WSAData)
tujj99 2003-12-19
  • 打赏
  • 举报
回复
MyInit()中增加:
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2),&WSAData)){
printf("WSA start error!");
ExitProcess(0);
}
另外:
serv.sin_addr.s_addr=htonl(INADDR_ANY);
serv.sin_family=AF_INET;
serv.sin_port=5000;//htons(5000);
前面要加:
ZeroMemery(&serv,sizeof(serv));
//cli也一样!
sboom 2003-12-19
  • 打赏
  • 举报
回复
结构很乱啊。。。
看是不是运行到了fun1里面啦。看fun1里面的connect返回的错误码是什么啦。
fuxf 2003-12-19
  • 打赏
  • 举报
回复
我也正想做类似的程序,我想用flag来保存是客户端还是服务器的信息,正在试验中.同进希望楼主成功后能让我们分享.

18,356

社区成员

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

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