zoukankan      html  css  js  c++  java
  • .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, 0this.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, 0this.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, 0this.receiveN);
                
    if (s != "success")
                {
                    
    throw new Exception("连接不成功" + s);
                }
            }
            
    #endregion
        }
    }

    使用方法

     public static readonly CacheSocket cac=new CacheSocket(2);

    cac.Cmd("发送内容");
  • 相关阅读:
    Swift学习 --- 2.1基础部分
    【oracle案例】ORA-01722
    一种适合于大数据的并行坐标下降法
    【机器学习算法-python实现】svm支持向量机(3)—核函数
    让Editplus支持sql语法高亮显示
    CF986F Oppa Funcan Style Remastered
    HashMap和Hashtable的区别
    ArrayList和Vector的区别
    基本概念
    java编程规范
  • 原文地址:https://www.cnblogs.com/suger/p/2131996.html
Copyright © 2011-2022 走看看