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. 前端面试题之 sum(2)(3) (链式调用,toString,柯里化,数组操作)

    写一个函数让下面两个输出结果相同:console.log(sum(2)(3));console.log(sum(2,3)); var sum = (function() { var list = [] ...

  2. CONFLICT (modify delete)冲突修复

    Demo git:(test) git merge feature CONFLICT (modify/delete): path/to/path/config.inc.php deleted in H ...

  3. tensorflow 安装GPU版本,个人总结,步骤比较详细【转】

    本文转载自:https://blog.csdn.net/gangeqian2/article/details/79358543 手把手教你windows安装tensorflow的教程参考另一篇博文ht ...

  4. omnibus gitlab-ce安装

    架构 关闭防火墙 [root@gitlab ~]# systemctl stop firewalld [root@gitlab ~]# systemctl disable firewalld 关闭SE ...

  5. [Opencv]图像的梯度与边缘检测(转)

    文章来源:https://blog.csdn.net/on2way/article/details/46851451 梯度简单来说就是求导,在图像上表现出来的就是提取图像的边缘(不管是横向的.纵向的. ...

  6. Pandas 练习题

    1. 使用 pandas 中的函数,下载上证综指过去一段时间的数据,进行数据探索. 上证综指,全称是上海证券综合指数,是以上证所挂牌上市的全部股票为计算范围,以发行量为权数的加权综合股价指数.这一指数 ...

  7. python 获取列表的键值对

    nums = [, , , , ] for num_index, num_val in enumerate(nums): print(num_index, num_val)

  8. git branch 误删 分支 找回

    今天在写东西的时候,把自己的dev分支给删掉了.并且手贱的是吧远程分支也删掉了. 但是好在我强大的git!!!,把他找回来是分分钟的事情. 一.查看一下提交记录 git log -g 会有一个列表.如 ...

  9. bzoj-5049-线段树

    5039: [Jsoi2014]序列维护 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 323  Solved: 193[Submit][Status ...

  10. IOS-多线程(NSOperation)

    一.基础用法 // // ViewController.m // IOS_0120_NSOperation // // Created by ma c on 16/1/20. // Copyright ...