1. 怎样判断socket连接成功
socket建立连接失败会抛出异常,你只需要在catch里捕捉异常就可以了catch(exceptione){System.out.println("服务器/客户端未连接");return;}
2. 常见Socket连接错误及原因有哪些
socketerrorcode:11001,socketerrorinfo:不知道这样的主机。 表示您的计算机无法连上服务器,请检查您的Proxy设定以及Proxy相关账号,或暂时取消您防毒软件的“个人防火墙”。 2、出现网络联机错误Socketerror#11004 socketerrorcode:11004,socketerrorinfo:请求的名称有效,但是找不到请求的类型的数据。 应该是网络联机状态问题,请用户检查网络联机是否正常。 3、出现网络联机错误Socketerror#10060 Connection Timed Out socketerrorcode:10060,socketerrorinfo:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 表示您与服务器发生联机逾时错误,请检查您的Proxy相关设定,以及Proxy Server是否已将SSL 443 port打开。 4、出现网络联机错误Socketerror#10061 socketerrorcode:10061,socketerrorinfo:由于目标计算机积极拒绝,无法连接。
3. windows socket 客户端怎么判断服务端已关闭
服务器端发起关闭,要让服务器发送RST而不是FIN,
这时客户端收到RST后send会直接返回失败(这时就检测出服务器已关闭)而不是阻塞。
如果直接调用closesocket会发送FIN,
需要设置linger使closesocket直接发送RST
代码:
SOCKET
soc_client
=
::accept(soc_listen,
(struct
sockaddr
*)&client_addr,
&len);
…
struct
linger
so_linger;
so_linger.l_onoff
=
1;
so_linger.l_linger
=
0;
setsockopt(soc_client,
SOL_SOCKET,
SO_LINGER,
(char
*)&so_linger,
sizeof(so_linger));
4. c#socket编程怎么判读客户端与服务器断开连接
使用Socket类中的Poll方法,就可以。
Socket client //假如已经创建好了,连接到服务器端得Socket的客户端对象。
我们只要client.Poll(10,SelectMode.SelectRead)判断就行了。只要返回True是。就可以认为客户端已经断开了。
Poll 方法将会检查 Socket 的状态。指定 selectMode 参数的 SelectMode..::.SelectRead,可确定 Socket 是否为可读。指定 SelectMode..::.SelectWrite,可确定 Socket 是否为可写。使用 SelectMode..::.SelectError 检测错误条件。Poll 将在指定的时段(以 microseconds 为单位)内阻止执行。如果希望无限期的等待响应,则将 microSeconds 设置为一个负整数。如果要检查多个套接字的状态,则不妨使用 Select 方法。
5. C++中怎么判断SOCKET的连接状态
你进行recv或者send操作时会报错的,在远端关闭时,你这边是可以通过select获取到事件的/或者加心跳机制来保证连通性
6. vb.net socket怎么判断客户端和服务器的连接断开了 thank you!
tcp
还是
udp?
tcp
的话
try
-
catch
就行了,因为
tcp
要求的是稳定的连接,连接一断开直接就
throw
exception
了。
udp
的话,因为它本身是无连接的协议,所以其实不存在断开不断开的,准确的说应该是超时。可以客户端每隔一段时间向服务端发送个心跳包(随便什么数据都行,只是证明客户端还在线),服务端每隔一段时间检测在线的客户端列表,谁已经很久没发来心跳包了就证明它掉线了。
7. 常见Socket连接错误及原因有哪些
表示您的计算机无法连上服务器,请检查您的Proxy设定以及Proxy相关账号,或暂时取消您防毒软件的“个人防火墙”。
8. vb.net中关于 socket的连接服务器失败问题! 怎么处理连接失败
用 try-catch 结构,捕获 SocketException,示例:
Try
//可能产生错误的代码
CatchexAsSocketException
MessageBox.Show("连接失败,原因是:"&ex.Message)
EndTry
P.S. 好久不写 VB.NET 的了,这个是根据 C# 和记忆中的样子写的,题主看明白思路就好。
9. 如何判断socket客户端和服务器端
法一:
当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。
法二:
struct tcp_info info;
int len=sizeof(info);
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED)) 则说明未断开 else 断开
法三:
若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。
法四:
int keepAlive = 1; // 开启keepalive属性
int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
int keepInterval = 5; // 探测时发包的时间间隔为5 秒
int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));
设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误
10. 如何判断socket客户端连接断开
你可以根据服务器收到的数据的长度来判断,如果服务器收到的数据长度是0,那么意味着你的客户端程序已经断开了连接。从tcp/ip协议栈的角度来说,就是客户端程序关闭了自己写的这一半连接,向服务器发出了一个fin。这涉及到tcp的状态迁移,关于这方面的知识,建议你看一下richard
stevens先生的《tcp/ip
详解》卷一和《unix网络编程》卷一,上面有详细的解释。
关于你的第二个问题,建议你仔细看一下自己的服务器程序代码。服务器程序首先要建立一个监听socket,当有客户端连接上来时,服务器会在一个新socket上接受客户端连接。所以并不存在“乱”的问题。关于这个问题同样推荐你看上面的两本关于网络编程的经典着作。