UDT ::发送for循环只发送一次。没有错误

问题描述:

这将发送数据一次,这似乎不合理的我,因为它是在一个for循环:UDT ::发送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循环,服务器端如何接收它们?

编辑: 参考您的帖子here。如果你的服务器代码看起来像这样,它只会接收一次。服务器正在从客户端获取连接,然后再接收一次,然后再次等待来自客户端的连接。但客户端一直在循环发送。它只是一个猜测,这是你的服务器代码,我可能是错的。

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; 
    } 
.................... 
.................... 
} 
+0

服务器正在接收一段时间(true)循环。 – 2010-11-20 16:17:19

+0

好的。服务器有点烦人。现在它似乎工作。 – 2010-11-20 16:27:15

它是通过循环10次,还是只经过循环一次?

我不熟悉您正在使用的库,但我没有看到任何种类的flush命令。如果它通过循环10次,但只发送一次数据,则可能需要刷新。

+0

它经历了10次循环。图书馆文件在这里:http://udt.sourceforge.net/udt4/index.htm。我应该如何冲洗?我对C/C++不太了解。我只是遵循文档中的一些代码片段。 – 2010-11-20 14:50:09

+0

你如何确定它只发送一条消息?您是否使用wireshark进行监控? – nos 2010-11-20 15:19:20

客户端和服务器结构不匹配。

客户端在1个连接内发送10次。 服务器接受10个连接,每个连接只读取1次。

很明显,每个连接都类似于一个容器。关闭连接后发送但未读取的数据将被丢弃,并且(当然)不能从其他连接访问。