public   class TestConnect

{

string hostIp = "";

int port = 3314;

public string recMsg = "";

Socket socketC = null;

private readonly ManualResetEvent TimeoutObject = new ManualResetEvent(false);

public TestConnect(string hostIp, int port)

{

this.hostIp = hostIp;

this.port = port;

}

public bool connect()

{

///创建终结点(EndPoint)

IPAddress ip = IPAddress.Parse(hostIp);//把ip地址字符串转换为IPAddress类型的实例

IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例

///创建socket

socketC = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字

try

{

return Connect(ipe,3000);

}

catch (SocketException ex)

{

socketC.Close();

socketC = null;

return false;

}

}

/// <summary>

/// Socket连接请求

/// </summary>

/// <param name="remoteEndPoint">网络端点</param>

/// <param name="timeoutMSec">超时时间</param>

public bool Connect(IPEndPoint remoteEndPoint, int timeoutMSec)

{

TimeoutObject.Reset();

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

socketC.BeginConnect(remoteEndPoint, CallBackMethod, socketC);

//阻塞当前线程

if (TimeoutObject.WaitOne(timeoutMSec, false))

{

return true;

}

else

{

return false;

}

}

//--异步回调方法

private void CallBackMethod(IAsyncResult asyncresult)

{

//使阻塞的线程继续

Socket socket = asyncresult.AsyncState as Socket;

if (socket.Connected)

{

socket.EndConnect(asyncresult);

}

TimeoutObject.Set();

}

public void testOnline(string msg)

{

socketC.Send(Encoding.GetEncoding("gb2312").GetBytes(msg));

      try

      {

//创建一个通信线程

ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);

Thread thr = new Thread(pts);

thr.IsBackground = true;

//启动线程

thr.Start(socketC);

      }

      catch

      { throw ;}

    }

  

   /// <summary>

/// 接收客户端发来的信息

/// </summary>

/// <param name="socketClientPara">客户端套接字对象</param>

private void ServerRecMsg(object socketClientPara)

{

Socket socketServer = socketClientPara as Socket;

byte[] arrServerRecMsg = new byte[100];

int len;

while ((len = socketServer.Receive(arrServerRecMsg)) != 0)

{

//将机器接受到的字节数组转换为人可以读懂的字符串

recMsg = Encoding.Default.GetString(arrServerRecMsg, 0, len);

if (recMsg == "online")

{

break;

}

}

}

}

socket测试远程地址能否连接并为连接设置超时(转)的更多相关文章

  1. socket测试远程地址能否连接并为连接设置超时

    public class TestConnect { string hostIp = ""; ; public string recMsg = ""; Sock ...

  2. java測试网络连接是否成功并设置超时时间

    /** * 获取RMI接口状态 * * @return "0":服务正常,"1": 连接报错,"2":连接超时 */ @Override p ...

  3. 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 数据库连接不释放测试 连接池 释放连接 关闭连接 有关 redis-py 连接池会导致服务器产生大量 CLOSE_WAIT 的再讨论以及一个解决方案

    import pymysqlfrom redis import Redisimport time h, pt, u, p, db = '192.168.2.210', 3306, 'root', 'n ...

  4. Java 测试URL地址是否能正常连接

    public static int testWsdlConnection(String address) throws Exception { int status = 404; try { URL ...

  5. Socket的协议地址属性

    首先列举所需要的头文件 #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #in ...

  6. TCP/IP,http,socket,长连接,短连接

    TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应 ...

  7. (转载)http和socket之长连接和短连接区别

    TCP/IPTCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议.在传输层中有TCP协议与UDP协议.在应用层有: ...

  8. Socket的长连接和短连接

    讨论Socket必讨论长连接和短连接 一.长连接和短连接的概念 1.长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接:后者是每次请求,都新建 ...

  9. http和socket之长连接和短连接区别【转】

    转自:https://blog.csdn.net/mengyafei43/article/details/25195445 TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层 ...

随机推荐

  1. 高可用Mysql架构_Haproxy+keepalived+mycat集群的配置

    接上一篇文章http://www.cnblogs.com/wt645631686/p/8310891.html,虽然已经在原有两台mycat基础上增加了Haproxy作为mycat的中间服务器,不足的 ...

  2. 【eclipse】Server Tomcat v9.0 Server at localhost failed to start.

    Server Tomcat v9.0 Server at localhost failed to start. 的一个原因就是启动超时了.

  3. Flask: socket.error: [Errno 48] Address already in use 问题

    参考: Mac OSX 解决socket.error: [Errno 48] Address already in use问题 Mac OS X中解决socket.error: [Errno 48] ...

  4. UVa 10328 Coin Toss(Java大数+递推)

    https://vjudge.net/problem/UVA-10328 题意: 有H和T两个字符,现在要排成n位的字符串,求至少有k个字符连续的方案数. 思路:这道题目和ZOJ3747是差不多的,具 ...

  5. 用 Rprof 进行性能分析

    R 提供了内置函数 Rprof( ) 对代码的性能进行分析.在分析过程中,会有一个抽样程序,并且是和后续代码一起运行的,直到分析结束.默认情况下,抽样程序基本上每隔20 毫秒就会记录一下当前 R 在运 ...

  6. D3.js学习笔记(六)——SVG基础图形和D3.js

    目标 在这一章,我们将会重温SVG图形,学习如何使用D3.js来创建这些图形. 这里会包括前面例子中的SVG基础图形以及如何使用D3.js设置图形的属性. 使用D3.js画一个SVG 的 圆 circ ...

  7. githubpage+hexo构建自己的个人博客

    就这有这么一天,我感觉博客园的博客页面实在太low了.完全跟不上现在潮流. https://segmentfault.com/a/1190000004947261 http://coolcao.com ...

  8. ES5和ES6中的继承

    看到一篇写的非常好的关于js继承的文章,其中对构造函数.原型.实例之间的关系的描述十分透彻,故转载作者文章以随时学习,并供大家共同进步! ES5 ES5中的继承,看图: function Super( ...

  9. Linux Mint 18.1安装nvidia驱动

    硬件环境:Dell Inspiron 7557笔记本(i7,8G,GTX960M) 软件环境:Linux Mint 18.1(基于Ubuntu 16.04) 问题描述: Linux Mint 18.1 ...

  10. UVA-10603 Fill (BFS)

    题目大意:有三个已知体积但不知刻度的杯子,前两个杯子中初始时没有水,第三个装满水,问是否可以倒出d升水,如果倒不出,则倒出一个最大的d’,使得d’<=d,并且在这个过程中要求总倒水量最少. 题目 ...