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. 20145201李子璇 《网络对抗》 Web安全基础实践

    1.实验后回答问题 (1)SQL注入攻击原理,如何防御 原理:通过构建特殊的输入作为参数传入web应用程序.即把SQL命令注入到Web表单的输入域或页面请求的查询字符串,和之前已经设定好的查询语句构成 ...

  2. windows10下如何进行源码编译安装tensorflow

    1.获取python3.5.x https://www.python.org/ftp/python/3.5.4/python-3.5.4-amd64.exe 2.安装python3.5.x,默认安装即 ...

  3. git commit时加上Signed-off-by信息

    git commit -s -m "descriptions about the code" 只要加入-s参数即可自动加上Signed-off-by信息

  4. HDU 6038 Function(思维+寻找循环节)

    http://acm.hdu.edu.cn/showproblem.php?pid=6038 题意:给出两个序列,一个是0~n-1的排列a,另一个是0~m-1的排列b,现在求满足的f的个数. 思路: ...

  5. python有木有哪些必须要学习的高级模块

    python有木有哪些必须要学习的高级模块 字母表

  6. hdu KiKi's K-Number 主席树

    KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. Codeforces Round #307 (Div. 2) C. GukiZ hates Boxes 二分

    C. GukiZ hates Boxes time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. Rails 5 Test Prescriptions 第5章 Testing Models

    Rails,model层包含业务逻辑和储存逻辑.其中储存逻辑被ActiveRecord处理. 在model中,不是每件事都必须是ActiveRecord对象.model layer可以包含各种服务,对 ...

  9. Curious Array CodeForces - 407C (高阶差分)

    高阶差分板子题 const int N = 1e5+111; int a[N], n, m, k; int C[N][111], d[N][111]; signed main() { scanf(&q ...

  10. UVA-1614 Hell on the Markets(贪心+推理) (有待补充)

    题目大意:一个整数序列a,1≤a[i]≤i.问能否通过在一些元素前加上负号,使得整个序列和为0. 题目分析:贪心.贪心策略:每次都先选最大的元素加负号(或保留,不加负号). 贪心依据:对于1≤a[i] ...