-1

仍在尝试理解 send() 和 recv() 函数。为什么这不起作用?服务器输出上没有打印任何内容。(除了一些测试“cout”)

这基本上是我正在搞乱的代码的一部分。

客户端:

char *mesg_to_send;   
Socket servSock;
mesg_to_send = The King is Dead!";
// Establish the connection to the echo server 
if(connect(servSock, (struct sockaddr *) &srvr_addr, sizeof(srvr_addr)) < 0)  
  DieWithError("connect() failed");
send(servSock, (char*) mesg_to_send, sizeof(int), 0);

服务器端:

char *sentence;
Socket clnt_socket;
// Wait for the client to connect
if((clnt_socket = accept(srvr_socket, (struct sockaddr *) &clnt_addr, &addr_len)) < 0)
  DieWithError("accept() failed");
recv(clnt_socket, (char*) sentence, sizeof(int), 0);
cout << sentence;
4

1 回答 1

0

马上,您的代码中有几个问题,除了语法错误(您的意思是在前面有一个开头引号The King吗?)。您是否真的编译和测试了您发布的相同代码?

  • 您只发送第一个sizeof(int)字节,而不是发送整个句子。由于sizeof(int)在您的平台上可能是 4,这意味着您可能只发送“The”。

  • 同样,您只是sizeof(int)从服务器上的客户端读取字节。相反,您可能希望读入更大的缓冲区,并在客户端发送数据时一直循环读取(即,只要您不读取 EOF)。

  • 什么数据类型Socket?套接字文件描述符应该保存在类型变量中int

  • 在服务器端,您不需要初始化sentence缓冲区。在您将它传递给 时recv,它是一个未初始化的指针,可能指向随机内存。

  • 您也可能没有addr_len在服务器上初始化(它应该sizeof(clnt_addr)在调用之前初始化recv)。

于 2013-04-06T19:59:49.337 回答