admin 管理员组

文章数量: 1086019


2024年3月14日发(作者:ios最新版本是多少)

服务器端代码:

namespace Server

{

public partial class Server2 : Form

{

delegate void MsgRef(string msg);

public Server2()

{

InitializeComponent();

}

AsySocket listener = null;

SortedList clients = new SortedList();

delegate void CallBackRef(string msg);

private void button1_Click(object sender, EventArgs e)

{

//监听

listener = new AsySocket(, ());

pt += new AcceptEventHandler(listener_OnAccept);

(10);

d = false;

}

void listener_OnAccept(AsySocket AcceptedSocket)

{

//注册事件

ngDataAccept += new StringDataAcceptHandler(AcceptedSocket_OnStringDataAccept);

ed += new AsySocketClosedEventHandler(AcceptedSocket_OnClosed);

cceptData();

//加入

(, AcceptedSocket);

}

void AcceptedSocket_OnClosed(string SocketID, string ErrorMessage)

{

//客户端关闭

(SocketID);

}

private void AddMsg(string msg)

{

if (Required)

{

CallBackRef c = new CallBackRef(AddMsgCallBack);

(c, new object[] { msg });

}

else

{

+= e + msg;

}

}

private void AddMsgCallBack(string msg)

{

+= e + msg;

}

void AcceptedSocket_OnStringDataAccept(string AccepterID, string AcceptData)

{

try

{

//显示

// += AccepterID + ": " + AcceptData + e;

MsgRef m = new MsgRef(AddMsg);

(m, new object[] { AcceptData });

//转发

for (int i = 0; i < ; i++)

{

if ([i].ID != AccepterID)

{

[i].ASend(AcceptData);

}

}

}

catch (Exception e)

{

(e);

}

}

private void btnSend_Click(object sender, EventArgs e)

{

if ( == "")

return;

//转发

for (int i = 0; i < ; i++)

{

[i].ASend("服务器:" + + r);

}

// += "发送:" + + e;

AddMsg("发送:" + );

= "";

();

}

}

}

客户端代码:

namespace Client

{

public delegate void StreamDataAcceptHandler(string AccepterID, byte[] AcceptData);

public delegate void StringDataAcceptHandler(string AccepterID, string AcceptData);

public delegate void AsySocketEventHandler(string SenderID, string EventMessage);

public delegate void AcceptEventHandler(AsySocket AcceptedSocket);

public delegate void AsySocketClosedEventHandler(string SocketID, string ErrorMessage);

///

/// State object for receiving data from remote device.

///

public class StateObject

{

// Client socket.

public Socket workSocket = null;

// Size of receive buffer.

public const int BufferSize = 1024;

// Receive buffer.

public byte[] buffer = new byte[BufferSize];

// Received data string.

public StringBuilder sb = new StringBuilder();

}

///

/// 文件名称:

/// 描 述:异步传输对象

///

public class AsySocket

{

public AsySocket(string LocalIP, int LocalPort)

{

mSocket = new Socket(etwork, , );

try

{

IPAddress ip = tAddresses(LocalIP)[0];

IPEndPoint ipe = new IPEndPoint(ip, LocalPort);

mID = d().ToString();

(ipe);

}

catch (Exception e)

{

//Err(e, ModuleName, "AsySocket", "");

}

}

/// 指定的Socket连接

public AsySocket(Socket linkObject)

{ mSocket = linkObject;

mID = d().ToString();

}

#region 私有字段

private Socket mSocket = null;

string mID = "";

private const string ModuleName = "ket";

private StreamDataAcceptHandler onStreamData = null;

private StringDataAcceptHandler onStringData = null;

private AsySocketEventHandler onSended = null;

private AsySocketEventHandler onSendTo = null;

private AcceptEventHandler onAccept = null;

private AsySocketClosedEventHandler onClosed = null;

#endregion

#region 公共属性

public static string EndChar

{

get

{

return new string((char)0, 1);

}

}

public string ID

{

get

{

return mID;

}

}

///

/// 发送、接受数据的结尾标志

///

public static char LastSign

{

get

{

return (char)0;

}

}

///

/// 获取、设置连接对象

///

public Socket LinkObject

{

get

{

return mSocket;

}

set

{

mSocket = value;

}

}

#endregion

#region 公共方法

///

/// 监听

///

public void Listen(int backlog)

{

if (mSocket == null)

throw new ArgumentNullException("连接不存在");

(backlog);

ccept(new AsyncCallback(AcceptCallBack), null);//异步

}

///

/// 开始接受数据

///

public void BeginAcceptData()

{

if (mSocket == null)

throw new ArgumentNullException("连接对象为空");

//开始接收数据

StateObject state = new StateObject();

cket = mSocket;

eceive(, 0, Size, 0, new AsyncCallback(ReceiveCallback), state);

//e();

}

///

/// 发送二进制数据

///

///

public void ASend(byte[] SendData)

{

if (mSocket == null)

throw new ArgumentNullException("连接不存在");

if (SendData == null)

return;

end(SendData, 0, , 0, new AsyncCallback(SendCallBack), mSocket);

//e();

}

///

/// 发送文本数据

///

///

public void ASend(string SendData)

{

if ( == 0)

return;

(es(SendData));

}

///

/// UDP发送二进制数据

///

///

/// 目标端点

public void ASendTo(byte[] SendData, IPEndPoint EndPoint)

{

if (mSocket == null)

throw new ArgumentNullException("连接不存在");

if (SendData == null)

return;

endTo(SendData, 0, , 0, EndPoint, new AsyncCallback(SendToCallBack), null);

//e();

}

///

/// UDP发送文本数据

///

///

///

public void ASendTo(string SendData, IPEndPoint EndPoint)

{

if ( == 0)

return;

ASendTo(es(SendData), EndPoint);

}

#endregion

#region 私有方法

private void AcceptCallBack(IAsyncResult ar)

{

Socket handler = ept(ar);

AsySocket NewSocket = new AsySocket(handler);

//激发事件

if (onAccept != null)

onAccept(NewSocket);

//重新监听

ccept(new AsyncCallback(AcceptCallBack), null);

}

private void ReceiveCallback(IAsyncResult ar)

{

try

{

StateObject state = tate as StateObject;

//读取数据

int bytesRead = eive(ar);

if (bytesRead > 0)

{

(ing(, 0, bytesRead));

string sb = ng();

if (ing( - 1, 1) == EndChar)

{

//接收完成

//激发事件

if (onStreamData != null)

onStreamData(mID, es(sb));

if (onStringData != null)

onStringData(mID, sb);

//

state = new StateObject();

cket = mSocket;

}

// Get the rest of the data.

eceive(, 0, Size, 0, new AsyncCallback(ReceiveCallback),

state);

}

}

catch (SocketException se)

{

if (onClosed != null)

onClosed(ID, e);

}

catch (Exception e)

{

throw new ApplicationException(e);

}

}

private void SendCallBack(IAsyncResult ar)

{

try

{

d(ar);

//();

//触发事件

if (onSended != null)

onSended(mID, "OK");

}

catch (SocketException se)

{

if (onClosed != null)

onClosed(ID, e);

}

catch (Exception e)

{

//throw new ApplicationException(e);

}

}

private void SendToCallBack(IAsyncResult ar)

{

try

{

dTo(ar);

//();

if (onSendTo != null)

onSendTo(mID, "OK");

}

catch (SocketException se)

{

if (onClosed != null)

onClosed(ID, e);

}

catch (Exception e)

{

throw new ApplicationException(e);

}

}

#endregion

#region 事件

///

/// 连接关闭的事件

///

public event AsySocketClosedEventHandler OnClosed

{

add

{

onClosed += value;

}

remove

{

onClosed -= value;

}

}

///

/// 接受连接的事件

///

public event AcceptEventHandler OnAccept

{

add

{

onAccept += value;

}

remove

{

onAccept -= value;

}

}

///

/// 接收二进制数据事件

///

public event StreamDataAcceptHandler OnStreamDataAccept

{

add

{

amData += value;

}

remove

{

amData -= value;

}

}

///

/// 接收文本数据事件

///

public event StringDataAcceptHandler OnStringDataAccept

{

add

{

onStringData += value;

}

remove

{

onStringData -= value;

}

}

///

/// 发送成功事件

///

public event AsySocketEventHandler OnSended

{

add

{

onSended += value;

}

remove

{

onSended -= value;

}

}

///

/// UTP发送成功事件

///

public event AsySocketEventHandler OnSendTo

{

add

{

onSendTo += value;

}

remove

{

onSendTo -= value;

}

}

#endregion

}

}


本文标签: 数据 事件 连接 发送 接受