.net socket客户端实例代码分享

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

}

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgysg.html