请问用C语言 socket编程,如何使TCP客户端实现网络恢复后自动重连的功能?

int re = send(sockClient,(char *)P,n,0);
if(re==-1)
{
//AfxMessageBox("连接断开");
do
{
Sleep(1000); } while (0!=connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)));
//AfxMessageBox("重连成功");
}
我的代码是这样写的,但是关闭服务端再打开服务端,却无法再次连接。试过先closesocket(sockClient);
WSACleanup();
再重新连接,也还是不行。请问这是什么原因呢?

呵呵,想了想 大概是这样几种可能,你可以尝试一下。

1。重新连接的过程要重新创建sockclient 也就是重新调用函数创建。

2。服务器关闭后再开启,绑定的是同一个接口。当关闭后再开启的时间较短时
端口可能处于忙状态,倒置再开启绑定到该端口失败,也就是服务器端启动失败。 处理办法:你可以利用setsockopt函数,将端口设置为可重用状态,我忘记那个宏是什么了 你可以上网去查查setsockopt的用法。

希望对你有用

best wishes
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-29
建议你去我的空间博客中看一下关于socket连接过程,你会明白为什么连接不了,因为accept后返回的socket是系统随机分配的。TCP指的点对点,其实就是socket对socket。

请问用C语言 socket编程,如何使TCP客户端实现网络恢复后自动重连的功...
1。重新连接的过程要重新创建sockclient 也就是重新调用函数创建。2。服务器关闭后再开启,绑定的是同一个接口。当关闭后再开启的时间较短时 端口可能处于忙状态,倒置再开启绑定到该端口失败,也就是服务器端启动失败。 处理办法:你可以利用setsockopt函数,将端口设置为可重用状态,我忘记那个宏是什么...

请问用C++ socket编程,如何使TCP客户端实现网络恢复后自动重连的功能...
你可以选择用操作系统的api或者应用框架的库,来实现相关功能。可选的有asio,poco,qt等等,一堆,关键看你做什么。

LinuxC编程建立TCP连接linuxctcp
&client_addr_len);上述步骤完成后,客户端和服务器的TCP连接建立完毕。在Linux C编程中,使用TCP协议建立客户端和服务器之间连接过程虽然繁琐,但是它可以实现可靠的数据传输和优秀的网络通信,这个代价值得支付。总而言之,在Linux C编程中使用TCP协议建立客户端和服务器之间连接,可以通过socket()、bind(...

Linux下C语言Socket编程问题?(高手进)
网络断开如拔掉网线时,系统程序一般是检测不出来的,尤其是广域网上。建议连接时设置linger属性,如果网络不通,能迅速决断立即返回失败错误。LINGER oLinger;oLinger.l_onoff = 1;oLinger.l_linger = 0;setsockopt(m_Socket,SOL_SOCKET,SO_LINGER,(char *)&oLinger,sizeof(oLinger));...

socket编程。怎么实现数据包的转发?C语言版的。
我们还知道如下几个事实:1。一个指定的端口号不能被多个程序共用。比如,如果IIS占用了80端口,那么Apache就不能也用80端口了。2。很多防火墙只允许特定目标端口的数据包通过。3。服务程序在listen某个端口并accept某个连接请求后,会生成一个新的socket来对该请求进行处理。于是,一个困惑了我很久的...

在windows下,如何用纯C语言实现socket网络编程?
mfc只是对socket进行了一些封装,大部分人做网络编程都是用的原始的socket,比如如下接口都可以在c下进行调用 1.socket()2.bind()3.connect()4.listen()5.accept()6.send() 和recv()7.sendto() 和recvfrom()8.close() 和shutdown()9.getpeername()10.gethostname()这些接口是在Winsock2.h...

Socket编程(C语言实现):socket()函数英文翻译
SOCK_DGRAM。protocol指使用协议,如TCP、UDP。成功执行socket()后返回非负整数文件描述符。可能失败原因包括:地址族不支持、文件描述符不足、协议不支持等。应用使用socket()时,需注意权限、资源可用性。理解不同地址族、协议支持的套接字类型。比喻socket为电脑插座,提供网络通信电源,简化理解。

在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库...
与Linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库 Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:Winsock 1:Windows CE平台支持。头文件:WinSock.h 库:wsock32.lib Winsock 2:部分平台如Windows CE...

C语言socket编程要怎么实现服务器可以发消息给客户端?
简单的说socket是一个全双工的通信通道,即使用TCP或者UDP通信时均可以在发送消息的同时接受消息,它不区分是否是服务器。根据这个概念你的问题就很好回答。》当客户端与服务器连接后。有什么方法使服务器可以随时随地发消息给客户端?》我现在只能。客户端发个消息给服务器。服务器才能发个消息给客户端。

为什么还要用c语言编写socket呢?现在java这么方便,想知道c来编socket有...
数据报套接字,对应与UDP协议。有本《Linux环境高级编程》你可以看看 Java 和其它语言之间进行Socket通信使用Socket和ServerSocket类。用JAVA编写server,C语言编写Client,当然可以实现通信(示例在最后)。1、Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket 是建立网络连接时使用...

相似回答