我的任务是实现一个通过TCP连接的两台计算机之间进行的双人游戏。其中一个要求是只有赢家才能选择是否再次进行游戏。如果服务器赢了并决定不再继续玩游戏,客户端应该重新启动作为服务器并接受新的连接。
我的方法是:如果在客户端模式下游戏失败,则关闭sockfd并重新创建另一个。然后使用setsockopt允许重新绑定使用SO_REUSEADDR,然后调用bind。
我的方法是:如果在客户端模式下游戏失败,则关闭sockfd并重新创建另一个。然后使用setsockopt允许重新绑定使用SO_REUSEADDR,然后调用bind。
int yes = 1;
if ( setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 )
{
perror("setsockopt");
}
if ( bind(sockfd, (struct sockaddr*)&svr, sizeof(svr) ) == -1 )
{
perror("server: bind");
}
但是,我仍然遇到了相同的“地址已在使用中”的错误。我尝试在重新创建套接字之前休眠150秒钟,这种方法有效。
注意:我正在同一台PC上测试。它可能适用于两个链接的PC,但必须使其在同一台PC上工作。请帮忙。
setsockopt()
部分),以便我们能够提供帮助。 - Greg Hewgill