gpt4 book ai didi

c# - 异步套接字将多条消息作为一条消息读取

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:38 25 4
gpt4 key购买 nike

在我的“客户端”中,我有以下代码:

socket.Send(ASCIIEncoding.UTF8.GetBytes("Test0"), SocketFlags.None);
socket.Send(ASCIIEncoding.UTF8.GetBytes("Test1"), SocketFlags.None);
socket.Send(ASCIIEncoding.UTF8.GetBytes("Test2"), SocketFlags.None);

在我的“服务器”中,我有以下内容:

public void ReadCallback(IAsyncResult ar)
{
StateObject state = (StateObject)ar.AsyncState;
Socket handler = state.WorkSocket;

int read = handler.EndReceive(ar);

if (read > 0)
{
string aux = Encoding.ASCII.GetString(state.buffer, 0, read);
//Rest of the code...

我的问题是:aux 是“Test0Test1Test2”...我原以为我的 ReadCallback 会被调用 3 次,每次 send 一次...但它只被调用一次...我需要做什么才能使 readcallback 的行为符合我的预期?

最佳答案

您似乎正在使用流式套接字(例如 TCP 而不是 UDP)。

流套接字是流 - 接收方不一定能判断消息是通过多次发送还是在一次发送中发送。

如果您需要分隔消息,您需要使用面向数据包或面向消息的协议(protocol),或者实现您自己的显示消息开始和结束位置的方法。

关于c# - 异步套接字将多条消息作为一条消息读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com