.net Socket客户端

作者:互联网   出处:控件中国网   2014-11-05 19:21:43   阅读:1

.net Socket客户端
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Net;
using System.Threading;
using System.Net.Sockets;

namespace W.Common
{
    public class CacheSocket
    {
        public Socket skClient;
        public string ip = string.Empty;
        public int port = -1;
        public int netID;
        // public int timeSleep = 1;

        //每次接收发送的临时信息
        private byte[] sendData;//发送的信息
        private byte[] receiveData = new byte[1024];//接收信息
        private int receiveN;
        private bool isErr = false;
        //--------

        public CacheSocket(int pNetID)
        {
            this.netID = pNetID;
            GetConfig();
            Connection();
            Cmd("netid:" + this.netID);
        }

        public CacheSocket(int pNetID, string pIP, int pPort)
        {
            this.ip = pIP;
            this.port = pPort;
            Connection();
            Cmd("netid:" + pNetID);
        }

        public string Cmd(string key)
        {
            lock (this)//一个信息发送后再接收为一次完成过程
            {
                this.sendData = Encoding.UTF8.GetBytes(key);

                try
                {
                    this.skClient.Send(this.sendData);
                }
                catch (Exception ex)
                {
                    isErr = true;
                    ("Send" + ex.Message).WriteLine();
                    ReSocket(() => { this.skClient.Send(this.sendData); });
                }

                try
                {
                    this.receiveN = this.skClient.Receive(this.receiveData);
                }
                catch (Exception ex)
                {
                    isErr = true;
                    ReSocket(() => { this.receiveN = this.skClient.Receive(this.receiveData); });
                    ("Receive" + ex.Message).WriteLine();
                }

                return Encoding.UTF8.GetString(this.receiveData, 0, this.receiveN);
            }
        }

        public delegate void ReSocket_D();
        private void ReSocket(ReSocket_D d)
        {
            if (isErr)
            {
                Connection();

                this.sendData = Encoding.UTF8.GetBytes("netid:" + this.netID);
                this.skClient.Send(this.sendData);

                this.receiveN = this.skClient.Receive(this.receiveData);
                if (Encoding.UTF8.GetString(this.receiveData, 0, this.receiveN) != "1")
                {

                }

                d();
                this.isErr = false;
            }
        }

        #region 获取IP和端口
        private void GetConfig()
        {
            this.ip = "127.0.0.1";   
            this.port = 1234;
        }
        #endregion

        #region 连接套接字
        private void Connection()
        {
            this.skClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ie = new IPEndPoint(IPAddress.Parse(this.ip), this.port);//服务器的IP和端口
            skClient.Connect(ie);

            byte[] data = new byte[7];
            this.receiveN = this.skClient.Receive(data);

            string s = Encoding.UTF8.GetString(data, 0, this.receiveN);
            if (s != "success")
            {
                throw new Exception("连接不成功" + s);
            }
        }
        #endregion
    }
}

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat