TCP/IPMessageFrame我搭建了一个TCP/IPserver/client,它是异步的,但是它连接消息。如何在开头正确添加标头,然后在末尾使用字符串生成器来分离完整消息。服务器阅读消息:PrivateSubReadCallback(ByValresultAsIAsyncResult)TryallDone.Set()DimsuccessAsBoolean=result.AsyncWaitHandle.WaitOne(500,True)IfsuccessThenDimclientAsServerClient=TryCast(result.AsyncState,ServerClient)IfclientIsNothingThenReturnEndIfDimnetworkStreamAsNetworkStream=client.NetworkStreamDimreadAsInteger=networkStream.EndRead(result)如果read=0ThenSyncLockMe.ClientsMe.Clients.Remove(client.ClientID)ReturnEndSyncLockEndIfIfIfIfclient.NetworkStream.CanReadThendataString.Append(Me.Encoding.GetString(client.buffer,0,read))networkStream.BeginRead(client.buffer,0,client.buffer.Length,AddressOfReadCallback,client)allDone。WaitOne(500,True)EndIfEndIfCatchexAsIO.IOExceptionDimclientAsServerClient=TryCast(result.AsyncState,ServerClient)SyncLockMe.ClientsMe.Clients.Remove(client.ClientID)返回结束SyncLockCatchexAsException如果不是Me.tcpListener.Server.ConnectedThenReturnEndIfEndTryEndSub客户端写入信息:PublicFunctionWrite(valueAsString,encodingAsEncoding)AsGuidDimbufferAsByte()=encoding.GetBytes(value)ReturnMe.Write(buffer)EndFunctionPublicFunctionWrite(bufferAsByte())AsGuidDimguid__1AsGuid=Guid.NewGuid()DimnetworkStreamAsNetworkStream=Me.client.GetStream()DimresultAsIAsyncResult=networkStream.BeginWrite(buffer,0,buffer.Length,无,guid__1)result.AsyncWaitHandle.WaitOne()networkStream.EndWrite(result)Returnguid__1EndFunction您需要在TCP/IP之上定义一个(可能很简单)协议,这样您就知道消息从哪里开始和结束TCP/IPIP可以并且将会对您发送的消息进行分段,以便接收方可以获取消息、整个消息或多条消息的一部分。一种简单的方法是在消息后面写消息长度。然后接收方读取字节缓冲区,一旦接收到适当数量的字节(基于发送的长度),它就可以提取消息并将其编码为字符串。以上就是C#学习教程:TCP/IP消息帧分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
