這是我第一次使用套接字,並且在接受服務器端的連接時遇到問題。我的服務器一次只能接受一個連接。一旦接收到連接,當前日期和時間將被寫入套接字,然後客戶端會打印出從服務器收到的日期和時間。我的服務器具有下面的代碼:服務器使用accept()接受連接後的問題
cout << "Server: Waiting for connections." << endl;
client_length = sizeof(client_address);
connection_fd = accept(listen_fd, (struct sockaddr*)&client_address, (socklen_t*)&client_length);
cout << "Server: Client connected" << endl;
當我跑我的服務器,我得到下面的輸出:
./server&
Server: Waiting for connections.
後來,當我跑我的客戶,我得到下面的輸出:
./client 127.0.0.1
Client: Connecting to: 127.0.0.1
Client: Connected to server.
Sun Sep 25 13:20:07 2011
客戶端似乎打印出正確的數據,但服務器從不打印出連接的客戶端。這裏不對勁。另一個症狀是當我嘗試寫入管道(客戶端寫入,服務器讀取)時,客戶端發生管道故障錯誤。有什麼我失蹤?如果您想查看任何代碼,請詢問。
編輯:這是在strace下運行的服務器。接受印出後似乎沒有任何事情發生。奇怪的?
write(2, "Server: Socket created.", 23Server: Socket created.) = 23
write(2, "\n", 1
) = 1
bind(3, {sa_family=AF_INET, sin_port=htons(4007), sin_addr=inet_addr("0.0.0.0")}, 16) = -1 EADDRINUSE (Address already in use)
write(2, "Server: Address and port bound t"..., 41Server: Address and port bound to socket.) = 41
write(2, "\n", 1
) = 1
listen(3, 100) = 0
write(2, "Server: Socket is now a listenin"..., 41Server: Socket is now a listening socket.) = 41
write(2, "\n", 1
) = 1
write(2, "Server: Waiting for connections.", 32Server: Waiting for connections.) = 32
write(2, "\n", 1
) = 1
accept(3,
謝謝。
嘗試運行下'strace'您的服務器綁定同一個端口在客戶端和獲取日誌的接受 – bdonlan
後會發生什麼情況顯示更多的服務器代碼。 – cnicutar
好吧,我用strace添加了運行服務器的輸出。 'accept(3,'是最後一個要輸出的東西,即使在與客戶端連接之後。我正在debian上開發這個代碼,但是當我嘗試在我的mac上運行它時奇怪地工作正常,你有什麼建議嗎? – Max