socket connect的问题

hanyuwei0 hanyuwei0 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我写的简单的socket服务器和客户端程序,服务器是只能接收一个客户端的连接。代码如下

// 创建套节字
SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
printf("Failed socket() \n");
return 0;
}

// 填充sockaddr_in结构
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(6000);
sin.sin_addr.S_un.S_addr = INADDR_ANY;

// 绑定这个套节字到一个本地地址
if(::bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("Failed bind() \n");
return 0;
}

// 进入监听模式
if(::listen(sListen, 2) == SOCKET_ERROR)
{
printf("Failed listen() \n");
return 0;
}

// 接受客户的连接请求
sockaddr_in remoteAddr;
int nAddrLen = sizeof(remoteAddr);
SOCKET sClient;
char szText[1024];
memset(szText,0,1024);
// 接受一个新连接
sClient = ::accept(sListen, (SOCKADDR*)&remoteAddr, &nAddrLen);
if(sClient == INVALID_SOCKET)
{
printf("Failed accept()");

}

printf(" 接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
}


在客户端connect时我这样写

m_socket=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==m_socket)
{
MessageBox("创建套接字失败!");
return ;
}


SOCKADDR_IN m_serv;
m_serv.sin_addr.S_un.S_addr=htonl(dwip);
m_serv.sin_family=AF_INET;
m_serv.sin_port=htons(m_port);


if(SOCKET_ERROR==connect(m_socket,(SOCKADDR*)&m_serv,sizeof(m_serv)))
{

MessageBox("连接服务器失败,请检查当前网络是否正常或对方服务器是否开启!");
return ;
}


目的是第一次运行客户端可以成功连上,第二次运行客户端会提示那段文字。但问题是第一次连接上了,第二次连接后程序没反应,MessageBox里那个里面没有执行,也就是connect成功了??
相不通是怎么回事,谁能解答下。顺便告诉下怎么样实现我想要的目的,就是只能一个客户端连上,另一个连会提示错误。
...全文

相关推荐

评论 14
收藏 已收藏
分享
返回顶部
hanyuwei0
网络编程 18,356 成员 64,161 内容