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. Sublime Text 3 插件的安装、升级和卸载

    Sublime Text 3 插件的安装.升级和卸载 快捷键:ctrl+shift+p打开命令面板,如图: 1,插件安装: 输入:install ,选择“Install package” ,如图: 然 ...

  2. 20155201 2016-2017-2 《Java程序设计》第三周学习总结

    20155201 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 - 第四章要点: 4.1类与对象 类定义时使用class关键词,基本模式为 class na ...

  3. 【大型web架构】一个大型web系统架构设计和技术选型的讨论摘录

    1.数据库压力问题 所有的压力最终都会反映到数据库方面,一定要对数据库有一个整体的规划. 可以按照业务.区域等等特性对数据库进行配置,可以考虑分库.使用rac.分区.分表等等策略,确保数据库能正常的进 ...

  4. JavaScript权威指南--类和模块

    知识要点 每个javascript对象都是一个属性集合,相互之间没有任何联系.在javascript中也可以定义对象的类,让每个对象都共享某些属性,这种“共享”的特性是非常有用的.类的成员或实例都包含 ...

  5. Java如何用一行代码初始化ArrayList

    参考链接: 1.Initialization of an ArrayList in one line 2.java怎么用一行代码初始化ArrayList

  6. 伪多项式时间 Pseudo-polynomial time

    2018-03-15 14:20:08 伪多项式时间:如果一个算法的传统时间复杂度是多项式时间的,而标准时间复杂度不是多项式时间的,则我们称这个算法是伪多项式时间的. 想要理解“伪多项式时间”,我们需 ...

  7. Android之水波纹点击效果(RippleView)

    Android5.0后各种炫的效果纷纷出来,写这篇博客主要是讲的是按钮点击效果带有的水波纹(波浪式). 当然我写的这个是自定义来实现的,在低版本(5.0一下)也可以实现点击效果.看看效果图: 上图可看 ...

  8. Java网络编程和NIO详解2:JAVA NIO一步步构建IO多路复用的请求模型

    Java网络编程与NIO详解2:JAVA NIO一步步构建IO多路复用的请求模型 知识点 nio 下 I/O 阻塞与非阻塞实现 SocketChannel 介绍 I/O 多路复用的原理 事件选择器与 ...

  9. offsetParent.scrollTop IE下一直报错,说“缺少对象”

    <div style="position:fiexd; top:135px;_position: absolute; right: 0pt; _top:expression_r(off ...

  10. jQuery.prop() 函数详解

    prop()函数用于设置或返回当前jQuery对象所匹配的元素的属性值. 该函数属于jQuery对象(实例).如果需要删除DOM元素的属性,请使用removeProp()函数. 语法jQuery 1. ...