【问题标题】:Basic Send() and Recv() TCP server and client C++基本的 Send() 和 Recv() TCP 服务器和客户端 C++
【发布时间】:2013-03-29 01:07:22
【问题描述】:

仍在尝试理解 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;

【问题讨论】:

    标签: tcp send sendmessage recv


    【解决方案1】:

    马上,您的代码中有几个问题,除了语法错误(您的意思是在The King 之前有一个开头引号吗?)。 Did you really compile and test the same code that you posted?

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-24
      • 2019-02-26
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 2018-01-20
      • 2020-06-19
      相关资源
      最近更新 更多