双向套接字通信

时间:2015-11-25 04:49:24

标签: c sockets networking

我正在尝试使用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);
 }
}

while sever.c中的循环如下所示:

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'
client -------------------------- server
hi                           

如果我去服务器发送'你'的消息,我得到:

client -------------------------- server
hi                           
                                  you
you                               hi

不确定这是怎么回事,但我想要实现的是,无论何时从客户端或服务器发送消息,它都应立即显示在另一端。

1 个答案:

答案 0 :(得分:1)

请注意,gets()是一个阻止函数。最初,在等待输入的gets()中阻止客户端和服务器。当您键入&#39; hi&#39;在客户端上,它将此信息发送到仍然被阻止的服务器。

发送hi后,客户端阻塞recv()调用,等待来自服务器的消息。另一方面,服务器还没有收到&#39; hi&#39;消息由客户发送。

当您输入&#39;你&#39;在服务器上,它来自gets()并发送&#39;你&#39;对客户。之后,服务器调用recv()并读取&#39; hi&#39;由客户发送。由于客户端已经在recv()中等待,因此它会显示“你”。由服务器发送。

因此,程序完全按照它的实现方式工作。请提及您的对象,不确定您想要实现的目标。