【发布时间】:2011-09-26 01:46:02
【问题描述】:
这是我第一次使用套接字,我在接受服务器端的连接时遇到了问题。我的服务器设计为一次只接受一个连接。一旦接收到连接,当前日期和时间将被写入套接字,然后客户端打印出它从服务器接收到的日期和时间。我的服务器有以下代码:
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下运行您的服务器并记录接受后发生的情况 -
好的,我添加了使用 strace 运行服务器的输出。
accept(3,是最后输出的东西,即使在与客户端连接之后也是如此。我正在 debian 上开发此代码,但当我尝试在我的 mac 上运行它时,它却奇怪地工作正常。你有什么建议吗?