我正在开发一个在网络实例之间传递字符串的 C# 应用程序。
该代码当前使用异步套接字,到目前为止一切正常(本地主机)。
但是,当我将通过真实接口时,当数据包将被拆分和合并时,我预计会出现缓冲问题。
客户:
Socket sock;
// Snip init and connect
string msg1 = "Hello\nWorld";
byte[] data1 = System.Text.Encoding.UTF8.GetBytes(msg1);
sock.Send(data1);
string msg2 = "Foo\nBar\nBaz";
byte[] data2 = System.Text.Encoding.UTF8.GetBytes(msg2);
sock.Send(data2);
我会选择这样的东西,但我想不出一个优雅的解决方案来解决缺失的部分:
服务器:
Socket sock;
MemoryStream ms = new MemoryStream();
Queue<string> strings = new Queue<string>();
// Snip init and receive connection
sock.BeginReceive(buffer, 0, MaxSize, SocketFlags.None, new AsyncCallback(OnReceived), null);
void OnReceived(IAsyncResult result) {
// Snip sanity stuff
int bytesReceived = sock.EndReceive(result);
// Here is where I'd need some help...
ms.Write(buffer, 0, bytesReceived);
ms.Flush();
for (;;) {
StreamReader sr = new StreamReader(ms);
if (sr.HasAStringTerminationCharacter) { // <-- How?
string currentString = sr.ReadUntilTermination(); // <-- How?
strings.Enqueue(currentString);
}
else
break;
}
sock.BeginReceive(buffer, 0, MaxSize, SocketFlags.None, new AsyncCallback(OnReceived), null);
}