socket 客户端 服务器源代码
客户端using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using GCI.VSP.Communication.Taxi.TaxiHQCommServer.Model;
namespace GCI.VSP.Communication.Taxi.TaxiHQCommServer.Net
{
/// <summary>
/// 华强终端TCP客户端类
/// 读者:Anson
/// 时间:2009年7月
/// 作用:客户端用于连接,断开,接收,发送,读取数据
/// 连接,发送,读取,接收,上线,关闭,注册,接收,发送回调函数
/// 收发器负责监听和发送数据,是业务数据的来源和出口;
/// 异步socket通讯
/// 最重要的是Riceive方法用于异步接收数据
/// 接收终端信息并发送终端返回信息,关闭客户端连接
/// </summary>
/// <remarks>
/// 时间 2008-06-XX 杨国健 建立
/// </remarks>
public class SocketClient
{
/// <summary>
/// 数据接收对象
/// 也包括Socket
/// 描述:把客户端终端发上来的数据保存在这个对象里
/// </summary>
ReadStateObject _readObject = null;
/// <summary>
/// 接收数据事件
/// </summary>
public event ReceiveHandler ReceiveEvent;
/// <summary>
/// 客户端关闭事件
/// </summary>
public event ClosedHandler Closed;
#region 属性
string _session = "";
/// <summary>
/// 唯一标识
/// 描述:属性Session
/// </summary>
public string Session
{
get { return _session; }
set { _session = value; }
}
string _Id;
/// <summary>
/// 华强的ID
/// 描述:属性ID
/// </summary>
public string Id
{
get { return _Id; }
set { _Id = value; }
}
string _IP;
/// <summary>
/// 连接IP
/// 描述:属性IP
/// </summary>
public string IP
{
get { return _IP; }
set { _IP = value; }
}
int _port;
/// <summary>
/// 端口
/// 描述:属性PORT
/// </summary>
public int Port
{
get { return _port; }
set { _port = value; }
}
private string _plateNo;
/// <summary>
/// 车牌号码(注册后)
/// 描述:属性车牌号
/// </summary>
public string PlateNo
{
get { return _plateNo; }
set { _plateNo = value; }
}
long _receiveCount = 0;
/// <summary>
/// 接收的数据量
/// 描述:属性接收数据的数据量
/// </summary>
public long ReceiveCount
{
get { return _receiveCount; }
set { _receiveCount = value; }
}
long _sendCount = 0;
/// <summary>
/// 发送的数据量
/// 描述:属性SendCount
/// </summary>
public long SendCount
{
get { return _sendCount; }
set { _sendCount = value; }
}
DateTime _lastReceiveTime = DateTime.Now;
/// <summary>
/// 最后接收时间
/// 描述:属性最后接收时间
/// </summary>
public DateTime LastReceiveTime
{
get { return _lastReceiveTime; }
set { _lastReceiveTime = value; }
}
DateTime _onLineTime = DateTime.Now;
/// <summary>
/// 上线时间
/// 描述:属性上线时间
/// </summary>
public DateTime OnlineTime
{
get { return _onLineTime; }
set { _onLineTime = value; }
}
private bool _isClosed = false;
/// <summary>
/// 是否已经关闭
/// 描述:属性关闭
/// </summary>
public bool IsClosed
{
get { return _isClosed; }
set { _isClosed = value; }
}
private bool _isRegister = false;
/// <summary>
/// 是否注册
/// 描述:属性是否注册
/// </summary>
public bool IsRegister
{
get { return _isRegister; }
set { _isRegister = value; }
}
/// <summary>
/// 接收的数据
/// 描述:属性接收的数据链表
/// </summary>
private List<byte> _byteData = new List<byte>();
#endregion
#region 构造方面
/// <summary>
/// 获取连接的Session,以唯一表示一个客户端
/// 描述:属性Session唯一标识
/// </summary>
/// <returns></returns>
private string GetSession()
{
return Guid.NewGuid().ToString();
}
/// <summary>
/// 描述:将异步接受的数据保存并处理5方法用于与终端通信就是要获得终端的IP和端口
/// 描述1:带参数的构造函数对起进行初始化操作
/// </summary>
/// <param name="socket"></param>
public SocketClient(Socket socket)
{
_readObject = new ReadStateObject();
_readObject.WorkSocket = socket;
IPEndPoint ipAndPort = (IPEndPoint)socket.RemoteEndPoint;//得到socket客户端IP
_IP = ipAndPort.Address.ToString();
_port = ipAndPort.Port;
_session = GetSession();
Receive();//开始异步接收终端发送的合法数据
}
--------------------编程问答-------------------- 干吗? --------------------编程问答-------------------- 大家有好的socket,客户端源码一起分享。希望大家跟帖! --------------------编程问答-------------------- 哦,原来是分享的,那就UP --------------------编程问答-------------------- 但是目的不止是分享:
因为这个代码我运行时会每隔10个小时就会死机一次!
情各位武林高手指点迷津。
但是我的代码不能完全发帖。版主警告发帖太频繁了! --------------------编程问答-------------------- 异步的? --------------------编程问答-------------------- 网上一堆堆啊 --------------------编程问答-------------------- 这不就是个pojo类嘛。
补充:.NET技术 , ASP.NET