c#Socket异步通信源码Word文档下载推荐.docx

上传人:b****5 文档编号:20541900 上传时间:2023-01-23 格式:DOCX 页数:15 大小:17.61KB
下载 相关 举报
c#Socket异步通信源码Word文档下载推荐.docx_第1页
第1页 / 共15页
c#Socket异步通信源码Word文档下载推荐.docx_第2页
第2页 / 共15页
c#Socket异步通信源码Word文档下载推荐.docx_第3页
第3页 / 共15页
c#Socket异步通信源码Word文档下载推荐.docx_第4页
第4页 / 共15页
c#Socket异步通信源码Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

c#Socket异步通信源码Word文档下载推荐.docx

《c#Socket异步通信源码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c#Socket异步通信源码Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

c#Socket异步通信源码Word文档下载推荐.docx

//注册事件

AcceptedSocket.OnStringDataAccept+=newStringDataAcceptHandler(AcceptedSocket_OnStringDataAccept);

AcceptedSocket.OnClosed+=newAsySocketClosedEventHandler(AcceptedSocket_OnClosed);

AcceptedSocket.BeginAcceptData();

//加入

clients.Add(AcceptedSocket.ID,AcceptedSocket);

voidAcceptedSocket_OnClosed(stringSocketID,stringErrorMessage)

//客户端关闭

clients.Remove(SocketID);

}

privatevoidAddMsg(stringmsg)

if(txtMsg.InvokeRequired)

CallBackRefc=newCallBackRef(AddMsgCallBack);

this.Invoke(c,newobject[]{msg});

else

txtMsg.Text+=Environment.NewLine+msg;

privatevoidAddMsgCallBack(stringmsg)

voidAcceptedSocket_OnStringDataAccept(stringAccepterID,stringAcceptData)

try

//显示

//this.txtMsg.Text+=AccepterID+"

:

"

+AcceptData+Environment.NewLine;

MsgRefm=newMsgRef(AddMsg);

this.Invoke(m,newobject[]{AcceptData});

//转发

for(inti=0;

i<

clients.Count;

i++)

if(clients.Values[i].ID!

=AccepterID)

clients.Values[i].ASend(AcceptData);

catch(Exceptione)

MessageBox.Show(e.Message);

privatevoidbtnSend_Click(objectsender,EventArgse)

if(txtSend.Text=="

"

return;

clients.Values[i].ASend("

服务器:

+txtSend.Text+AsySocket.EndChar);

//txtMsg.Text+="

发送:

+txtSend.Text+Environment.NewLine;

AddMsg("

+txtSend.Text);

txtSend.Text="

;

txtSend.Focus();

}

客户端代码:

namespaceClient

publicdelegatevoidStreamDataAcceptHandler(stringAccepterID,byte[]AcceptData);

publicdelegatevoidStringDataAcceptHandler(stringAccepterID,stringAcceptData);

publicdelegatevoidAsySocketEventHandler(stringSenderID,stringEventMessage);

publicdelegatevoidAcceptEventHandler(AsySocketAcceptedSocket);

publicdelegatevoidAsySocketClosedEventHandler(stringSocketID,stringErrorMessage);

///<

summary>

///Stateobjectforreceivingdatafromremotedevice.

/summary>

publicclassStateObject

//Clientsocket.

publicSocketworkSocket=null;

//Sizeofreceivebuffer.

publicconstintBufferSize=1024;

//Receivebuffer.

publicbyte[]buffer=newbyte[BufferSize];

//Receiveddatastring.

publicStringBuildersb=newStringBuilder();

///文件名称:

AsySocket.cs

///描述:

异步传输对象

publicclassAsySocket

publicAsySocket(stringLocalIP,intLocalPort)

mSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

IPAddressip=Dns.GetHostAddresses(LocalIP)[0];

IPEndPointipe=newIPEndPoint(ip,LocalPort);

mID=Guid.NewGuid().ToString();

mSocket.Bind(ipe);

//ErrLog.RecordErr(e,ModuleName,"

AsySocket"

"

);

paramname="

LinkObject"

>

指定的Socket连接<

/param>

publicAsySocket(SocketlinkObject)

{mSocket=linkObject;

#region私有字段

privateSocketmSocket=null;

stringmID="

privateconststringModuleName="

GYGameServer.AsySocket"

privateStreamDataAcceptHandleronStreamData=null;

privateStringDataAcceptHandleronStringData=null;

privateAsySocketEventHandleronSended=null;

privateAsySocketEventHandleronSendTo=null;

privateAcceptEventHandleronAccept=null;

privateAsySocketClosedEventHandleronClosed=null;

#endregion

#region公共属性

publicstaticstringEndChar

get

returnnewstring((char)0,1);

publicstringID

returnmID;

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

publicstaticcharLastSign

return(char)0;

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

publicSocketLinkObject

returnmSocket;

set

mSocket=value;

#region公共方法

///监听

publicvoidListen(intbacklog)

if(mSocket==null)

thrownewArgumentNullException("

连接不存在"

mSocket.Listen(backlog);

mSocket.BeginAccept(newAsyncCallback(AcceptCallBack),null);

//异步

///开始接受数据

publicvoidBeginAcceptData()

连接对象为空"

//开始接收数据

StateObjectstate=newStateObject();

state.workSocket=mSocket;

mSocket.BeginReceive(state.buffer,0,StateObject.BufferSize,0,newAsyncCallback(ReceiveCallback),state);

//receiveDone.WaitOne();

///发送二进制数据

SendData"

<

publicvoidASend(byte[]SendData)

if(SendData==null)

mSocket.BeginSend(SendData,0,SendData.Length,0,newAsyncCallback(SendCallBack),mSocket);

//sendDone.WaitOne();

///发送文本数据

publicvoidASend(stringSendData)

if(SendData.Length==0)

this.ASend(UTF8Encoding.UTF8.GetBytes(SendData));

///UDP发送二进制数据

EndPoint"

目标端点<

publicvoidASendTo(byte[]SendData,IPEndPointEndPoint)

mSocket.BeginSendTo(SendData,0,SendData.Length,0,EndPoint,newAsyncCallback(SendToCallBack),null);

//sendToDone.WaitOne();

///UDP发送文本数据

publicvoidASendTo(stringSendData,IPEndPointEndPoint)

ASendTo(UTF8Encoding.UTF8.GetBytes(SendData),EndPoint);

#region私有方法

privatevoidAcceptCallBack(IAsyncResultar)

Sockethandler=mSocket.EndAccept(ar);

AsySocketNewSocket=newAsySocket(handler);

//激发事件

if(onAccept!

=null)

onAccept(NewSocket);

//重新监听

privatevoidReceiveCallback(IAsyncResultar)

StateObjectstate=ar.AsyncStateasStateObject;

//读取数据

intbytesRead=mSocket.EndReceive(ar);

if(bytesRead>

0)

state.sb.Append(UTF8Encoding.UTF8.GetString(state.buffer,0,bytesRead));

stringsb=state.sb.ToString();

if(sb.Substring(sb.Length-1,1)==EndChar)

//接收完成

if(onStreamData!

onStreamData(mID,UTF8Encoding.UTF8.GetBytes(sb));

if(onStringData!

onStringData(mID,sb);

//

state=newStateObject();

//Gettherestofthedata.

catch(SocketExceptionse)

if(onClosed!

onClosed(ID,se.Message);

thrownewApplicationException(e.Message);

privatevoidSendCallBack(IAsyncResultar)

mSocket.EndSend(ar);

//sendDone.Set();

//触发事件

if(onSended!

onSended(mID,"

OK"

//thrownewApplicationException(e.Message);

privatevoidSendToCallBack(IAsyncResultar)

mSocket.EndSendTo(ar);

//sendToDone.Set();

if(onSendTo!

onSendTo(mID,"

#region事件

///连接关闭的事件

publiceventAsySocketClosedEventHandlerOnClosed

add

onClosed+=value;

remove

onClosed-=value;

///接受连接的事件

publiceventAcceptEventHandlerOnAccept

onAccept+=value;

onAccept-=value;

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

publiceventStreamDataAcceptHandlerOnStreamDataAccept

this.onStreamData+=value;

this.onStreamData-=value;

///接收文本数据事件

publiceventStringDataAcceptHandlerOnStringDataAccept

onStringData+=value;

onStringData-=value;

///发送成功事件

publiceventAsySocketEventHandlerOnSended

onSended+=value;

onSended-=value;

///UTP发送成功事件

publiceventAsySocketEventHandlerOnSendTo

onSendTo+=value;

onSendTo-=value;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1