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. 监控代码运行时长 -- StopWatch用法例程

    在.net环境下,精确的测量出某段代码运行的时长,在网络通信.串口通信以及异步操作中很有意义.现在做了简单的总结.具体代码如下: (1).首先 using System.Diagnostics; (2 ...

  2. ThinkPHP使用Memcached缓存数据

    ThinkPHP默认使用文件缓存数据,支持Memcache等其他缓存方式,有两个PHP扩展:Memcache和Memcached,Memcahe官方有说明,主要说一下Memcached. 相对于PHP ...

  3. Charles的使用教程

    Charles是mac os和windows下的另外一个抓包软件(均收费,可破解),功能与fiddler类似,优点是可以自定义上下行网速.External Proxy.反向代理配置简单.可解析AMF协 ...

  4. js数字验证

    1.JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g, ...

  5. MVC中的错误过滤器无法拦截URL路径错误的解决办法

    “/”应用程序中的服务器错误. 无法找到资源. 说明: HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保其拼写正确. 请求 ...

  6. SQL Performance Improvement Techniques(转)

    原文地址:http://www.codeproject.com/Tips/1023621/SQL-Performance-Improvement-Techniques This article pro ...

  7. SQL使用记录

    Q:怎么删掉sql server登录时的用户名?(仅仅是删掉那个登录时的提示) A:先关闭数据库登录引擎,然后删除:%AppData%\Microsoft\Microsoft SQL Server\1 ...

  8. C++ primer学习记录(个人猜想未测试版本)

    学习版本:第五版. 本博文主要记录个人曾经并不知晓知识细节. 因为linux下的编译环境还未进行学习.所以实际代码测试将在今后完成. 红色:需确认. 蓝色:重点. 1)const对象设定为仅在文件内有 ...

  9. html 调用 activeX(c++)

    1.新建MFC ActiveX 2.添加方法 3.找到add函数编写代码 4.在test.idl中找到最后一个uuid 5.编译工程,会自动注册控件 6.html中的代码 <html> & ...

  10. Servlet Examples

    Servlet Examples Servlet Examples 1.Hello World output: code: 1.import java.io.*;2.import javax.serv ...