2010-11-20 69 views
0

這將發送數據一次,這似乎不合理的我,因爲它是在一個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"); 
} 

回答

1

您是否檢查過服務器端代碼。客戶端正在發送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

1

它是通過循環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

客戶端和服務器結構不匹配。

客戶端在1個連接內發送10次。 服務器接受10個連接,每個連接只讀取1次。

很明顯,每個連接都類似於一個容器。關閉連接後發送但未讀取的數據將被丟棄,並且(當然)不能從其他連接訪問。