[size=medium] c,c#判断socket是否断开[/size]

本文介绍如何使用C/C#语言检测Socket连接的状态,包括连接是否正常及远程主机是否断开连接等关键信息。提供了两种语言的示例代码,通过Poll函数和Connected属性来实现对连接状态的有效监测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=medium] c,c#判断socket是否断开[/size]
1)c#

//判断是否连接
public bool IsConnected()
{
if (_socket == null)
{
return false;
}
else if (!SocketIsConnected)
{
return false;
}
else
{
return !((_socket.Poll(1000, SelectMode.SelectRead) && (_socket.Available == 0)) || !_socket.Connected);
}
}



C# TcpClient在连接成功后无法检测连接状态,即使对方关闭了网络连接。以下扩展可检测连接状态:

static class TcpClientEx {

public static bool IsOnline(this TcpClient c) {

return !((c.Client.Poll(1000, SelectMode.SelectRead) && (c.Client.Available == 0)) || !c.Client.Connected);

}

}


2)c

int SocketWorker::Recv(char *buf,int bufLen)
{
int nread = 0;
int nleft = bufLen;
char *ptr = buf;
try{
while(nleft > 0){
nread = recv(_socket,ptr,nleft,0);
if(nread < 0) {
THROW_RUNTIME_EX(StringHandler::catStrAndDword("socket recv: errno=",WSAGetLastError()));
}
if (nread == 0) {
break; //eof
}
ptr += nread;
nleft -= nread;
}
}catch(RunTimeException & rtex){
//ERROR_NET(rtex.what());
throw;
}catch(...){
try{
//ERROR_NET("SocketWorker::Recv(char *buf,int bufLen)未知异常");
}catch(...){}
}
return (bufLen - nleft);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值