2013-01-14 40 views
0

我的簡單程序沒有通過編譯器發生錯誤,運行良好,但它沒有給出輸出,直到有人連接。我已經做了很多研究和編輯,但無法弄清楚。還有,我怎麼讓不止一個人連接?任何幫助,讓這個工作,將不勝感激。提前致謝!!!代碼如下。C++網絡程序運行但沒有輸出

#include <iostream> 
#include <sys/socket.h> 
#include <arpa/inet.h> 
#include <stdio.h> 
#include <string.h> 

char msg[20]; 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    cout << "Made it to main!"; 

    int listener_d = socket(PF_INET, SOCK_STREAM, 0); 

    struct sockaddr_in name; 
    name.sin_family = PF_INET; 
    name.sin_port = (in_port_t)htons(30000); 
    name.sin_addr.s_addr = INADDR_ANY; 
    if(bind (listener_d, (struct sockaddr *) &name, sizeof(name)) == -1) 
    { 
     cout << "Can't bind the port!"; 
    } 
    else 
    { 
     cout << "The port has been bound."; 
    } 

    listen(listener_d, 10); 
    cout << "Waiting for connection..."; 

    while(1) 
    { 
     struct sockaddr_storage client_addr; 
     unsigned int address_size = sizeof(client_addr); 
     int connect_d = accept(listener_d, (struct sockaddr *)&client_addr, &address_size); 
     cin >> msg; 

     send(connect_d, msg, strlen(msg), 0); 
    } 
    return 0; 
} 
+1

「但它不會給出它應該輸出的結果」它應該給出什麼輸出? – Csq

+0

我剛剛編譯它[在liveworkspace](http://liveworkspace.org/code/40ZzEI$0),它給出了輸出。 –

回答

2

也許你應該嘗試沖洗輸出。

std::cout << "Waiting for connection..." << std::flush; 
+0

只要你從'cin >> msg讀取''不應'cout'被刷新? –

+2

@Jesse:IIRC有一個設置。但是請注意,只有在套接字連接之前,纔會從'cin'讀取任何內容程序高興地等待'accept()'調用,'cin'沒有被使用,'cout'沒有被刷新。 –

+0

+1 OP剛剛編輯了問題,直到有人連接。 –