相关疑难解决方法(0)

从Bash函数返回一个布尔值

我想编写一个bash函数来检查文件是否具有某些属性并返回true或false.然后我可以在我的脚本中使用它"if".但是我该怎么回事呢?

function myfun(){ ... return 0; else return 1; fi;}
Run Code Online (Sandbox Code Playgroud)

然后我像这样使用它:

if myfun filename.txt; then ...
Run Code Online (Sandbox Code Playgroud)

当然这不起作用.如何实现这一目标?

bash shell boolean

186
推荐指数
8
解决办法
18万
查看次数

在套接字库中调用recv时,我的recv缓冲区应该有多大

我对C中的套接字库有几个问题.这是我在问题中引用的一段代码.

char recv_buffer[3000];
recv(socket, recv_buffer, 3000, 0);
Run Code Online (Sandbox Code Playgroud)
  1. 如何确定recv_buffer的大小?我使用3000,但这是任意的.
  2. 如果recv()收到的数据包大于我的缓冲区会怎么样?
  3. 我怎么知道我是否收到了整个消息而没有再次调用recv并且在没有任何东西被接收时让它永远等待?
  4. 有没有办法让缓冲区没有固定的空间,这样我可以继续添加它而不用担心空间不足?也许strcat用于连接recv()缓冲区的最新响应?

我知道这里有很多问题,但我非常感谢任何回复.

c sockets buffer recv

126
推荐指数
4
解决办法
10万
查看次数

如何找到我可以发送的最大UDP数据包而不会分段?

我需要知道我可以发送到另一台计算机的最大UDP数据包没有碎片.

该大小通常称为MTU(最大传输单元).据推测,在两台计算机之间,将有许多可能具有不同MTU的路由器和调制解调器.

我读到Windows中的TCP实现自动找到路径中的最大MTU.

我也在试验,我发现从我的电脑到服务器的最大MTU是57712字节+标题.上面的任何东西都被丢弃了.我的电脑在局域网上,不是MTU应该在1500字节左右吗?

networking udp tcp mtu

54
推荐指数
2
解决办法
7万
查看次数

为最大吞吐量,UDP数据包的最佳大小是多少?

我需要通过可能有损的网络将数据包从一个主机发送到另一个主机.为了最小化数据包延迟,我不考虑TCP/IP.但是,我希望最大化吞吐量uisng UDP.应该使用的UDP数据包的最佳大小是多少?

以下是我的一些注意事项:

  • 网络中交换机的MTU大小为1500.如果我使用大数据包,例如8192,则会导致碎片.丢失一个片段会导致丢失整个数据包,对吧?

  • 如果我使用较小的数据包,我将产生UDP和IP头的开销

  • 如果我使用一个非常大的数据包,我可以使用的最大数据包是多少?我读到最大的数据报大小是65507.我应该使用什么缓冲区大小来发送这样的大小?这有助于提高我的吞吐量吗?

  • 常见操作系统(例如Windows,Linux等)支持的典型最大数据报大小是多少?

更新:

数据的一些接收器是未实现TCP/IP堆栈的嵌入式系统.

我知道这个地方到处都是那些非常喜欢使用可用内容的人.但我希望能得到更好的答案,而不仅仅关注MTU.

c++ linux windows udp network-programming

38
推荐指数
4
解决办法
5万
查看次数

在Windows下更改默认套接字缓冲区大小

我无法更改的应用程序是丢弃一些传入的UDP数据包.我怀疑接收缓冲区溢出.是否有注册表设置使默认缓冲区大于8KB?

sockets windows registry udp

8
推荐指数
1
解决办法
4万
查看次数

Hyper-V机器上的套接字异常

最近,我们的整个QA环境从VMWare迁移到Hyper-V虚拟机.

我们的一个应用程序以每秒20K数据包的速率将UDP数据包发送到多播云.

虽然这在VMWare环境中运行良好,但Hyper-V使应用程序在几分钟的工作后抛出以下异常:

System.Net.Sockets.SocketException (0x80004005): An invalid argument was supplied
   at System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
Run Code Online (Sandbox Code Playgroud)

在将套接字的发送缓冲区大小定义为1,000,000字节时,我还设法立即模仿了这个问题.

我该如何解决这个问题?

更新1:一旦发生异常,这是来自事件查看器的日志条目:

Faulting application name: Agent.exe, version: 1.0.12.7366, time stamp: 0x51389f69
Faulting module name: KERNELBASE.dll, version: 6.1.7601.18015, time stamp: 0x50b83c8a
Exception code: 0xe0434352
Fault offset: 0x0000c41f
Faulting process id: 0xaf0
Faulting application start time: 0x01ce1b4ce509dc7a
Faulting application path: C:\Users\DevUser\Desktop\QA\Agent.exe
Faulting module path: C:\Windows\syswow64\KERNELBASE.dll
Report Id: d2b45dce-8740-11e2-86f9-00155d022804
Run Code Online (Sandbox Code Playgroud)

更新2:UDP数据包的大小为100-200字节.

更新3:这是有问题的代码:

    m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    m_socket.Ttl = 1; …
Run Code Online (Sandbox Code Playgroud)

c# udp hyper-v multicast winsock

6
推荐指数
1
解决办法
638
查看次数

UDP数据包可以像TCP一样部分发送吗?

我创建了一些具有自己的数据ACK系统的客户端/服务器应用程序.它最初是在TCP中制作的,因为有一些限制,但基础是考虑UDP.

我发送到服务器的数据包有自己的封装(数据包ID和数据包大小标题.我知道UDP也有校验和所以我没有添加标题.),但是TCP如何工作,我知道服务器可能没有收到整个数据包,所以我收集并缓冲了收到的数据,直到收到完整的有效数据包.

现在我有机会将我的客户端/服务器程序传递给UDP,我知道与TCP的一个区别是数据没有按照发送的顺序接收(这就是为什么我添加了数据包ID头).

我想知道的是:如果我发送多个数据包,是否会收到没有保证订单但保证封装的数据包?我的意思是,如果我发送一个大小为1000字节的数据包和另一个大小为400字节的数据包,服务器将接收2个数据包,1000个字节中的一个和400字节中的另一个,或者有机会接收200个1000个字节,那1000个字节的400个字节以及之后的其他字节如TCP可以做什么?

sockets udp tcp difference

3
推荐指数
1
解决办法
1200
查看次数

发送带有UDP协议和writeDatagram的结构

我的目标是通过UDP协议发送结构,我的问题是我用来执行此功能的功能与其参数中的结构不兼容。(我正在使用QT)

这是我编写的代码:

void MyUDP::sendUDP()
{
    typedef struct MyStructTag
    {
       int test1;
       bool test2;
       char test3;
    } MyStruct;

    MyStruct envoie;

    // Sends the datagram datagram
    // to the host address and at port.
    // qint64 QUdpSocket::writeDatagram(const QByteArray & datagram,
    //                      const QHostAddress & host, quint16 port)

    socket->writeDatagram(envoie, QHostAddress("10.100.14.79"), 4000);


}
Run Code Online (Sandbox Code Playgroud)

我知道这条线是完全错误的:socket->writeDatagram(envoie, QHostAddress("10.100.14.79"), 4000);但是我不正确地使用此功能,或者该功能是否有替代方法?

谢谢您的帮助。

c++ sockets qt udp

2
推荐指数
1
解决办法
2302
查看次数

标签 统计

udp ×6

sockets ×4

c++ ×2

tcp ×2

windows ×2

bash ×1

boolean ×1

buffer ×1

c ×1

c# ×1

difference ×1

hyper-v ×1

linux ×1

mtu ×1

multicast ×1

network-programming ×1

networking ×1

qt ×1

recv ×1

registry ×1

shell ×1

winsock ×1