c#关于socket连接超时控制的方案

之前有一个项目用到Remoting技术,当远程的地址无效或服务器没运行时,访问远程对象方法,会经过几十秒的时间才抛出异常。因为我用的是tcp模式,所以想到可以用socket来测试连接,就可以在调用远程对象方法之前知道远端服务有没有运行。代码如下:

public class TcpServiceConnect

{

protected EventWaitHandle   m_event;

public TcpServiceConnect()

{

m_event = new EventWaitHandle(true, EventResetMode.ManualReset);

}

public void Close()

{

m_event.Set();

}

public bool TryConnect(string ip, int port)

{

m_event.Reset();

var point = new IPEndPoint(IPAddress.Parse(ip), port);

var sok   = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

sok.BeginConnect(point, ConnectCallBack, sok);

m_event.WaitOne(3000, false);

bool isConnected = sok.Connected; //事件等结束后,通过这个属性可以知道有没有连续成功

sok.Close();

return isConnected;

}

private void ConnectCallBack(IAsyncResult asyncresult)

{

try

{

var sok = (Socket)asyncresult.AsyncState;

sok.EndConnect(asyncresult);

}

catch { }

m_event.Set();

}

}

时间: 2024-08-27 13:49:13

c#关于socket连接超时控制的方案的相关文章

c# socket通信较完善方案

c#的socket通信应用.文件较多.附件为工程.  core AbstractBytesWorker.cs    字节工作器(基类),用于用于同一不同功能的字节工作器 BinaryHand.cs  2进制处理器.  ThDispose.cs 处理回收相关 crc  entity ThPersonInfo.cs manager ThSocketManager.cs  ThSocketManagerBusiness.cs 所有的业务 request RequestCode.cs  请求码 ThPr

socket连接和TCP连接的关系

我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP.FTP.TELNET等,也可以自己定义应用层协议.WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上. 1)Socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等等.而TCP和UDP协议属于传输层 . 而http是个应用层的协议,它

Http和Socket连接区别

1.TCP连接 要想明白Socket连接,先要明白TCP连接.手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. 建立起一个TCP连接需要经过“三次握手”: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k

外网客户端访问校园内网的服务器——socket连接

在做客户端与服务器的socket连接并发送数据应用中,通常有以下四种情况: 1).客户端在内网,服务器在内网. 对于这种情况,只需要用服务器的内网IP即可. 2).客户端在外网,服务器在内网. 对于这种情况,服务器可采用花生壳软件来进行外网IP与内网IP的映射. 3).客户端在内网,服务器在外网. 对于这种情况,只需要用服务器的外网IP即可. 4).客户端在外网,服务器在外网. 对于这种情况,只需要用服务器的外网IP即可. 从分析中可以看出,只有情况二是特殊的,由于服务器在内网,而客户端在外网,

android 使用Ntrip协议,socket连接获取接入点,登录模式

前段时间出差去解决一个问题,就是获取接入点,还有登录模式.手机网络差分设置的问题,在这过程是使用Ntrip协议的.这个有点坑的地方,是在于服务器那边是不是按照协议来标准处理这些验证数据.首先是一个socket连接,socket连接上了发送协议.这个协议就是Ntrip来做的. Ntrip协议的下载地址:点击 1.使用背景 使用最多就是手机卡的接入点设置,android 系统设置,移动网络,可以新建apn设置.有些专卡,专网使用需要自已设置apn.平时我们自已使用的手机网络的接入点都是默认的.如下图

socket连接和HTTP连接的区别

简单说, 你浏览的网页(网址以HTTP:// 开头) 都是HTTP协议传输到你的浏览器的, 而HTTP是基于socket之上的, socket是一套完成TCP, UDP协议的接口. HTTP协议: 简单对象访问协议, 对应于应用层, HTTP协议是基于TCP连接的. TCP协议: 对应于传输层 IP协议: 对应于网络层 TCP/IP是传输层协议, 主要解决数据如何在网络中传输: 而HTTP是应用层协议, 主要解决如何包装数据. socket是对TCP/IP协议的封装, socket本身并不是协议

UrlConnection连接和Socket连接的区别

关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下:抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节.urlconnection 基于Http协议,Http协议是应用层协议,对传输层Tcp协议进行了封装,是无状态协议,不需要你往考虑线程.同步.状态治理等,内部是通过socket进行连接和收发数据的,不过一般在数据传输完成之后需要封闭socket连接.直接使用Socket进行网络通讯得考虑线程治理.客户状态监控等,但是不用发送头信息等,更

Android客户端通过Socket连接服务器

Android客户端通过Socket连接服务器. Android互联网项目中,绝大部分都有连接远程服务器的需求,连接的方式有多种,可以是TCP的方式,当然也可以通过Socket的方式. 相对于TCP的方式,Socket的方式略显的较为原始,对于客户端来说,复杂度反而比TCP的方式还要高一些,毕竟TCP的连接有现成的框架可以使用, 比如Spring等. 而使用socket方式这些工作完全需要客户端来做,也增加了客户端的工作量,不过凡事有利弊,通过socket的方式,流量上 相对于TCP等的方式更加

Cocos网络篇[3.2](3) ——Socket连接(1)

[唠叨] 在客户端游戏开发中,使用HTTP进行网络通信的比较少,一般使用的都是Socket进行通信.而HTTP一般用于网页或者网页游戏. 使用第三方Socket通信库:ODSocket. [参考] http://blog.csdn.net/sight_/article/details/8138802 (Socket详解) http://blog.csdn.net/hguisu/article/details/7444092 (Socket编程原理) [源码下载] ODSocket库源码:http