c# - C# 中的问题套接字 TCP IP 在停止之前仅收到来自客户端的一条消息
问题描述
我的服务器在 tcp/ip 中有问题,因为收到一条消息后不起作用。我不知道使用 while 是否正确,以及如何表达。有什么建议吗?
谢谢
my method()
sdk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sdk.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8052));
sdk.Listen(10);
Socket accepted = sdk.Accept();
Buffer = new byte[accepted.SendBufferSize];
int bytesRead = accepted.Receive(Buffer);
byte[] formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = Buffer[i];
}
Debug.Log("\t Server" + "\n");
string stradata = Encoding.ASCII.GetString(formatted);
Debug.Log("-->" + "" + stradata + "\n\n");
testo = stradata;
//sdk.Close(); tried to uncomment
//accepted.Close(); tried to uncomment
解决方案
您需要不断地从套接字读取,直到您读取了所有您想要的数据
sdk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sdk.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8052));
sdk.Listen(10);
Socket accepted = sdk.Accept();
Buffer = new byte[accepted.SendBufferSize];
while (true)
{
// begin reading continually from the socket
// Socket::Receive() will block until it gets some data
// Exception handling required here for when client closes connection
int bytesRead = accepted.Receive(Buffer);
byte[] formatted = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
{
formatted[i] = Buffer[i];
}
Debug.Log("\t Server" + "\n");
string stradata = Encoding.ASCII.GetString(formatted);
Debug.Log("-->" + "" + stradata + "\n\n");
// Need to add some exit logic here eg,
if(stradata.Contains("EXIT"))
break;
}
sdk.Close();
accepted.Close();
推荐阅读
- javascript - 如何在jQuery中使用数组,可以在php中读取的数组?
- python - 异步套接字服务器作为生产者,工作人员正在使用它
- javascript - 使用 C# 而不是 JavaScript 进行 POST 尝试时出现 403 错误
- firemonkey - IdHTTP 或 TFileStream 文件锁定?
- nestjs - 如何为渲染引擎提供全局属性
- linux - QEMU 通用模拟失败
- wso2 - 如何使配置部分可配置
- yii2 - Yii2 GridView 分页 + 搜索过滤器
- python-3.x - 仅从带有附加文本 ml,kg,l 的文本中提取数字
- c++ - 我可以制作矢量对象的算术表达式吗?