这是我第一次使用套接字,并且在接受服务器端的连接时遇到问题。我的服务器一次只能接受一个连接。一旦接收到连接,当前日期和时间将被写入套接字,然后客户端会打印出从服务器收到的日期和时间。我的服务器具有下面的代码:服务器使用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