当前位置:编程学习 > C#/ASP.NET >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,