首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果我在毫秒内调用它太多,为什么Tcp上的套接字不发送?

如果我在毫秒内调用它太多,为什么Tcp上的套接字不发送?
EN

Stack Overflow用户
提问于 2014-03-11 08:53:26
回答 3查看 290关注 0票数 1

我正在使用以下代码

代码语言:javascript
复制
for(int i =0; i < 100; i++){ 
    TcpSocket.Send(getModifiedData(MyData));
}

代码被调用得太多了,也许每一个滴答都有一次。

套接字连接到我的本地机器(127.0.0.1),因此没有延迟,口袋丢失等。

第一条信息很好,但我以后没有得到一些口袋。

现在,如果我将代码更改为下面的代码,那么我所有的口袋都会被发送和接收!

代码语言:javascript
复制
for(int i =0; i < 100; i++){ 
    Console.WriteLine("SendData > " + TcpSocket.Send(getModifiedData(MyData)));
}

是的,我很确定,因为我已经测试过10多次了。使用WriteLine方法登录控制台解决了此问题。

我完全被这个奇怪的问题迷住了。

请注意,下面的代码有助于发送更多的口袋比第一个默认代码张贴的问题。

代码语言:javascript
复制
for(int i =0; i < 100; i++){ 
    System.Threading.Thread.Sleep(1);
    TcpSocket.Send(getModifiedData(MyData));
}

但是即使睡觉了,我10%的口袋也丢了!

我找到了日志来满足最好的解决方案,即100%的口袋没有损失。

接收机代码:

代码语言:javascript
复制
 // variables
    static NetworkStream^ NS;
 // CClient::NS = gcnew NetworkStream(CClient::sender);

//
Dictionary<String^, Object^>^ x = (Dictionary<String^, Object^>^)PClientFuncs::Deserialize(CClient::NS); 

//method
Object^ PClientFuncs::Deserialize(Stream^ s){
try{
    BinaryFormatter^ formatter = gcnew BinaryFormatter();
    DeflateStream^ serializationstream = gcnew DeflateStream(s, CompressionMode::Decompress);
    return formatter->Deserialize(serializationstream);


}
catch (Exception^) {
    return nullptr;
}
}

那有什么问题吗?为什么会发生这种情况,以及如何解决?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-11 09:04:32

您假设TCP以数据包的形式发送数据。这不是真的。TCP presents you a contiguous stream of bytes. --这意味着您收到的东西不一定与您发送的“块”相同。很可能,这让你的听筒很困惑。

处理此问题的最佳方法是不编写基于TCP的应用程序。使用一些较高级别的构造,如HTTP。客户端和服务器的库是可用的。他们帮你解决了很多问题。

票数 1
EN

Stack Overflow用户

发布于 2019-02-02 21:13:53

我试过了

代码语言:javascript
复制
for(int i =0; i < 100; i++){ 
Console.WriteLine("SendData > " + TcpSocket.Send(getModifiedData(MyData)));

}

而且效果很好。http://prntscr.com/mfswpr

你能给我们看看你的客户端和服务器套接字吗?

票数 0
EN

Stack Overflow用户

发布于 2014-03-11 09:02:00

我最好的猜测是,您的接收代码会慢下来,而TCP缓冲区就会溢出。

如果您生成的数据比处理的速度更快,那么其中的一些最终会丢失。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22320656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档