UDP服务器连接和发送数据怪异

时间:2011-09-16 10:16:28

标签: c++ udp winsock2

我正在制作用于教育目的的异步(非阻塞的rly)套接字lib。 TCP部分工作得很好,但是当涉及到UDP时,我遇到了奇怪的行为。以下代码按预期工作 - 服务器接收数据:

MyUDPSocket server;
server.Bind(5551);

MyUDPSocket client;
client.Connect("192.168.0.103", 5551);
Sleep(10);
client.Write("\x0", 1);
Sleep(10);
client.Write("test", 5);

但是如果是Sleep()或者client.Write(“\ x0”,1);被注释掉 - 它停止工作。服务器只是不会获取数据。以下是我的库中的一些部分,可以让您了解插槽是如何制作的:

s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
...............................................
memset( &name, 0, sizeof(name) );
name.sin_family = AF_INET;
name.sin_port = htons( port );
hostent* hostinfo = gethostbyname( address );
name.sin_addr.s_addr = ((struct in_addr *)hostinfo->h_addr)->s_addr;

connect(s, (sockaddr*)&name, sizeof name)

如你所见,没有任何幻想。也许是一些不言而喻的规则,发送一个字节的数据来初始化连接是必需的还是什么?我真的很困惑。

编辑: 按要求写入功能。 name变量与Connect代码中的设置非常相同。

virtual int Write( void* data, int size )
{
    return sendto(s, (const char*)data, size, 0, (sockaddr*)&name, sizeof name);
}

编辑: 同样在select()循环中,我只检查可读的套接字。是否因为连接被初始化而无法写入套接字?如果是这种情况,它应该解决第一次睡眠。但那么发送一个字节呢?

0 个答案:

没有答案