【发布时间】:2015-11-26 00:19:50
【问题描述】:
我正在尝试使用 C 编写一个简单的双向套接字通信。到目前为止,我的 client.c 文件的主 while 循环如下所示:
while ( gets(str) != NULL ) {
sSize = send(s, str, strlen(str), 0);
if ( len != strlen(str) ) {
exit(1);
}
else {
rSize = recv(s, buffer, 64, 0);
buf[rSize] = '\0';
printf("%s\n", buffer);
}
}
sever.c 中的 while 循环如下所示:
while ( 1 ) {
gets(str);
send(p, str, strlen(str), 0);
rSize = recv(p, buffer, 32, 0);
if ( rSize < 0 ) {
exit(1);
}
buf[len] = '\0';
else{
printf("%s\n", buffer);
}
}
程序编译正常,我可以在两台机器之间建立连接,但是当我从客户端或服务器发送消息时,我得到一个异常:
从客户端发送消息'hi'
客户端 -------------- 服务器 你好
如果我去服务器发送“你”消息,我会得到:
客户端 -------------- 服务器
你好
你
你好
不确定这是怎么回事,但我想要实现的是,无论何时从客户端或服务器发送消息,它都应立即显示在另一端。
【问题讨论】:
-
您应该说明您的预期以及为什么这不是您的预期。在我看来,您的程序正在做它应该做的事情。每一方输入一条消息,然后双方交换消息。
-
如果
recv()返回零,您应该停止从套接字读取,关闭它,然后去做其他事情,或者退出。对等方已断开连接。 -
请注意,数据远比代码重要,而且更难正确处理。您没有发布 str、len、buffer 等项目的声明。问题示例:除非您向我们展示,否则我们如何知道您的缓冲区至少为 65 长?
标签: c sockets networking