`

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

 
阅读更多
                   c,c#判断socket是否断开
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);
}

分享到:
评论

相关推荐

    WhisperDesktop和medium模型(分卷压缩文件 1/2)

    WhisperDesktop和medium模型(分卷压缩文件 1/2)

    WhisperDesktop和medium模型(分卷压缩文件 2/2)

    WhisperDesktop和medium模型(分卷压缩文件 2/2)

    Mysql_多实例安装配置方法一

    接下来,复制MySQL配置文件(如`my-medium.cnf`)并重命名,例如为`my1.cnf`和`my2.cnf`。然后,根据每个实例的需求修改配置文件。对于第二个实例,例如`my2.cnf`,你需要更改`port`、`socket`等参数,确保它们与第...

    curbly-editor:定制版的 Medium-Editor

    $ bower install curbly-editor #= require medium-editor/medium-editor #= require jquery-ui/jquery-ui #= require handlebars/handlebars #= require blueimp-file-upload/jquery.iframe-transport #= require ...

    utm_medium 再见-crx插件

    使用 declarativeNetRequest 从 URL 中删除跟踪标记,例如 utm_source、utm_medium 和 utm_campaign。许多网站使用 URL 标记通过 URL 向网站传递相关信息来跟踪用户。例如:...

    如何修改mysql字符集

    - 在`/usr/share/mysql/`目录下,会发现有几个示例配置文件,如`my-huge.cnf`、`my-innodb-heavy-4G.cnf`、`my-large.cnf`、`my-medium.cnf`和`my-small.cnf`。可以根据服务器的需求选择一个合适的配置文件,这里...

    关于BBS的制作,基于ASP.NET+数据库

    Font-Names="宋体" Font-Size="Medium" ForeColor="White" Height="20px" /&gt; &lt;AlternatingRowStyle BackColor="White" /&gt; &lt;/asp:GridView&gt; &lt;asp:SqlDataSource ID="SqlDataSource1" runat="server" ...

    My97DatePicker文件包和使用例子

    解压后,将这个文件夹放到项目某个目录... &lt;asp:TextBox ID="tbSJ" Font-Size="Medium" runat="server" Width="145px" class="Wdate" onFocus="new WdatePicker(this,'%Y-%M-%D %h:%m',true,'default')"&gt;&lt;/asp:TextBox&gt;

    My97DatePicker文件包

    My97DatePicker文件包,解压后,将这个... &lt;asp:TextBox ID="tbSJ" Font-Size="Medium" runat="server" Width="145px" class="Wdate" onFocus="new WdatePicker(this,'%Y-%M-%D %h:%m',true,'default')"&gt;&lt;/asp:TextBox&gt;

    LNMPA的安装与优化过程

    * 优化 MySQL 的配置文件,例如调整 innodb_buffer_pool_size、sort_buffer_size 等参数。 * 优化 MySQL 的索引,例如创建合适的索引,可以提高查询效率。 * 优化 MySQL 的查询,例如使用explain命令来分析查询语句...

    搭建lnmp或是lamp架构

    - 配置文件:复制my-medium.cnf至/etc/my.cnf,并将mysql.server拷贝至/etc/init.d/mysqld,设置执行权限,然后加入服务管理。 ```shell cp my-medium.cnf /usr/local/mysql/etc/my.cnf cp mysql.server /etc/...

    medium-api:Node.js库以获取最近的中型用户帖子

    Node.js库以获取最近的Medium用户帖子。 安装 npm install @giuseppecampanelli/medium-api 用法 // require library const medium = require('@giuseppecampanelli/medium-api') // get most recent profile ...

    高仿QQ验证码

    private static readonly string[] _FONT_FAMIly = { "Arial", "Arial Black", "Arial Italic", "Courier New", "Courier New Bold Italic", "Courier New Italic", "Franklin Gothic Medium", "Franklin Gothic ...

    un-utm:摆脱 URL 栏中丑陋的 utm_source 查询参数

    非UTM 这是一个简单的浏览器扩展,通过从 URL 中删除丑陋的 UTM 跟踪参数来清理 URL。 使用浏览器window.history API 加载页面后,将删除这些参数。 这样,页面仍会获取其分析信息,我们只是让 URL 看起来更漂亮。...

    CRichEdit的使用.rar

    // Storage medium = HBITMAP handle stgm.hBitmap = hBitmap; stgm.pUnkForRelease = NULL; // Use ReleaseStgMedium FORMATETC fm; fm.cfFormat = CF_BITMAP; // Clipboard format = CF_BITMAP ...

    medium-editor:Medium.com所见即所得的编辑器克隆。 使用contenteditable API实施富文本解决方案

    如果您有兴趣帮助在github上维护最成功的WYSIWYG文本编辑... link rel =" stylesheet " href =" //cdn.jsdelivr.net/npm/medium-editor@latest/dist/css/medium-editor.min.css " type =" text/css " media =" screen

    Linux AS4下安装安装mysql

    1. 检查MySQL服务是否已启动:`# /etc/rc.d/init.d/mysqld status` 2. 确认`mysql.sock`文件位于正确的位置:`# mysql -u你的用户名 -p -S /var/lib/mysql/mysql.sock` 3. 尝试手动启动MySQL服务:`# service mysqld...

    离线语音合成 TTS_Test(语音) C Sharp c# 例程

    在给定的“离线语音合成 TTS_Test(语音) C Sharp c# 例程”中,我们可以深入探讨使用科大讯飞离线语音包在C#环境中实现这一功能的方法。 首先,科大讯飞是一家在中国领先的语音技术提供商,其离线语音包包含了预先...

    vue实现条件判断动态绑定样式的方法

    在我们做前端页面的时候,为了美观和直观,我们希望通过条件判断来让页面显示不同的样式,如下图所示: 当值为“是”时,显示绿色的标签,当值为“否”...el-tag size=medium :type=scope.row.is_multiple === '否' ?

Global site tag (gtag.js) - Google Analytics