UDT ::发送在for循环中仅发送一次。没有错误
-
26-09-2019 - |
题
此仅发送一次数据,这似乎不合理的我,因为它是在一个for循环:
char* hello;
for (int i = 0; i < 10; i++) {
hello = "Hello world!\n";
if (UDT::ERROR == UDT::send(client, hello, strlen(hello) + 1, 0))
{
cout << "send: " << UDT::getlasterror().getErrorMessage();
}
}
不应该将其发送数据的10倍?我不明白。这里是整个程序(它是相当短的):
int main()
{
UDTSOCKET client;
sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(9000);
inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr);
memset(&(serv_addr.sin_zero), '\0', 8);
client = UDT::socket(AF_INET, SOCK_STREAM, 0);
// connect to the server, implict bind
if (UDT::ERROR == UDT::connect(client, (sockaddr*)&serv_addr, sizeof(serv_addr)))
{
cout << "connect: " << UDT::getlasterror().getErrorMessage();
}
char* hello;
for (int i = 0; i < 10; i++) {
hello = "Hello world!\n";
if (UDT::ERROR == UDT::send(client, hello, strlen(hello) + 1, 0))
{
cout << "send: " << UDT::getlasterror().getErrorMessage();
}
}
UDT::close(client);
system("pause");
}
解决方案
你检查服务器端代码。客户端是做在一个for循环发送,如何在服务器侧接收它们?
while (true)
{
UDTSOCKET recver = UDT::accept(serv, (sockaddr*)&their_addr, &namelen);
cout << "new connection: " << inet_ntoa(their_addr.sin_addr) << ":" << ntohs(their_addr.sin_port) << endl;
if (UDT::ERROR == UDT::recv(recver, data, 100, 0))
{
cout << "recv:" << UDT::getlasterror().getErrorMessage() << endl;
//return 0;
}
....................
....................
}
其他提示
它经过循环10次,或仅经过一次循环?
我不熟悉您使用的库,但我没有看到任何一种flush
命令。如果它通过循环10次,但只有一次发送数据时,你可能需要刷新。
客户端和服务器的结构不匹配。
客户端发送10次1个内连接。 服务器接受10个连接,并读取每一个内只有1次。
显然,每一个连接是simmilar到容器中。数据发送但关闭连接被丢弃和(当然)无法从其他连接访问后无法读取。
不隶属于 StackOverflow