public class TcpClientSession
{
protected TcpClient Client { get; set; }
/// <summary>
/// 远程地址
/// </summary>
protected IPEndPoint RemoteEndPoint { get; set; }
/// <summary>
/// 是否已经连接
/// </summary>
public bool IsConnected { get; private set; }
/// <summary>
/// 接收缓存区大小
/// </summary>
public int ReceiveBufferSize = ;
/// <summary>
/// 数据流对象
/// </summary>
protected NetworkStream _NetStream; /// <summary>
/// 已连接事件
/// </summary>
public event Action OnConnected;
/// <summary>
/// 断开事件
/// </summary>
public event Action OnClosed; public TcpClientSession(IPEndPoint remoteEndPoint)
{
if (remoteEndPoint == null)
throw new ArgumentNullException("remoteEndPoint"); RemoteEndPoint = remoteEndPoint;
} public TcpClientSession(string server, int port)
{
if (server != null && port > )
{
if (!Regex.IsMatch(server, @"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})"))
{
try
{
IPHostEntry ipHostEntry = System.Net.Dns.GetHostEntry(server);
server = ipHostEntry.AddressList[].ToString();
}
catch (Exception)
{
throw new ArgumentNullException("远程IP地址或域名不正确");
}
} RemoteEndPoint = new IPEndPoint(IPAddress.Parse(server), port);
}
else
throw new ArgumentNullException("remoteEndPoint");
} public void Connect()
{
Client = new TcpClient(RemoteEndPoint.AddressFamily);
Client.ReceiveBufferSize = ReceiveBufferSize;
Client.Connect(RemoteEndPoint);
if (Client.Client.Connected)
{
_NetStream = Client.GetStream(); IsConnected = true;
if (this.OnConnected != null)
OnConnected();
}
else
throw new Exception("Unable to connect to a remote device"); } public byte[] Received()
{
if (Client.Client.Connected)
{
byte[] buffer = null;
buffer = new byte[ReceiveBufferSize];
_NetStream.Read(buffer, , buffer.Length);
return buffer;
}
else
{
Close();
}
return null;
} public void Send(byte[] bs)
{
if (Client.Client.Connected)
{
_NetStream.Write(bs, , bs.Length);
}
else
{
Close();
}
} public void Close()
{
if (Client.Client.Connected)
{
Client.Close();
_NetStream.Close();
} IsConnected = false;
if (this.OnClosed != null)
OnClosed();
}
}

TcpClient的更多相关文章

  1. C# - 网络编程 之 TcpClient与TcpListener

    TcpClient类 TcpListener类 TCP通信 UDP通信 参考:

  2. TcpClient 有好多坑

    下面2篇文章里头的问题都碰到了,真是好坑哈, 在此留念. 使用 TcpClient 與 NetworkStream 類別開發時的注意事項 [C#] NetworkStream.Write()存在严重b ...

  3. Socket聊天室-TcpListener,TcpClient

    参考自:http://blog.csdn.net/liguo9860/article/details/6148614 服务端:

  4. TcpClient类与TcpListener类

    TcpClient类 //构造方法1 TcpClient t = new TcpClient(); t.Connect(); //构造方法2 IPEndPoint iep = ); TcpClient ...

  5. Socket的三个功能类TCPClient、TCPListener 和 UDPClient (转)

    应用程序可以通过 TCPClient.TCPListener 和 UDPClient 类使用传输控制协议 (TCP) 和用户数据文报协议 (UDP) 服务.这些协议类建立在 System.Net.So ...

  6. c# TCPclient

    服务端 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

  7. C# TcpClient TcpListener 简单练习01

    下面是读<Visual C#.Net 网络编程>整理的练习代码. 客户端发送命令给服务端,从服务器端获取所有人员的成绩或者指定人员的成绩. 命令格式为 GET 0|1 [Name].0为获 ...

  8. Socket与TcpClient的区别(转载)

    Socket和TcpClient有什么区别 原文:http://wxwinter.spaces.live.com/blog/cns!C36588978AFC344A!322.entry 回答: &qu ...

  9. TcpClient 错误"不能做任何连接,因为目标机器积极地拒绝它" 的解决

    TcpClient 错误"不能做任何连接,因为目标机器积极地拒绝它" 的解决 //以下是tcpclient服务器端的监听程序,假设服务器端和客户端在同一台机器上,//为了使客户端可 ...

  10. C#TCPClient应用-一个简单的消息发送和接收

    TcpSend窗口用于发送消息,另外写一个用于接收消息的应用程序,消息接受到以后,必须要关闭接收消息的窗口,才能在接收新的消息,不知道怎么能解决这个问题. 源代码: 发送消息的窗口代码 using S ...

随机推荐

  1. NPOI兼容 excel2003,2007版本

    根据项目需要,需要对excel进行导入导出,所以选择NPOI,优点在这里就不详细介绍了,下面进入正题. public int Import(string path) { IList<Studen ...

  2. checkbox,radio,selected相关操作

    1.radio:单选框 HTML代码: <input type="radio" name="radio" id="radio1" va ...

  3. Graham算法—二维点集VC++实现

    一.凸包定义 通俗的说就是:一组平面上的点,求一个包含所有点的最小凸多边形,这个最小凸多边形就是凸包. 二.Graham算法思想 概要:Graham算法的主要思想就是,最终形成的凸包,即包围所有点的凸 ...

  4. 判断浏览器IE6

    <!--[if lte IE 6]><LINK rel="stylesheet" type="text/css" href="ima ...

  5. 用JavaScript将Canvas内容转化成图片的方法

    上周我们花了半天时间开发下一个准备放进Mozilla Marketplace的应用.有一个应用现在非常的火热,那就是Instagram,Facebook花了100万美元收购了它.我们也想有100万美元 ...

  6. win32 调用多媒体函数PlaySound()

    必须引入此头文件 #include <mmsystem.h>#pragma comment(lib, "WINMM.LIB") /*------------------ ...

  7. [转]printf 字符串格式化

    在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出 ...

  8. Android上使用OpenglES2.0遇到的一点问题

    按照教程开发OpenglES2.0应用,遇到Logcat报错“Called unimplemented OpenGL ES API” 在论坛和stackoverflow上找到了答案. 1.manife ...

  9. CodeForces 203C Photographer

    简单贪心.注意内存够大,能满足所有顾客的特殊情况. #include <iostream> #include <cstring> #include <algorithm& ...

  10. python学习day4

    目录 一.迭代器 二.yield生成器 三.装饰器 四.递归 五.基础算法 迭代器 #1.在不使用for循环的情况下 li = [11 ,22, 33, 44] #count = len(li) #s ...