Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本发送()和接收()TCP服务器和客户端C++;_Tcp_Send_Sendmessage_Recv - Fatal编程技术网

基本发送()和接收()TCP服务器和客户端C++;

基本发送()和接收()TCP服务器和客户端C++;,tcp,send,sendmessage,recv,Tcp,Send,Sendmessage,Recv,仍在尝试理解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 *)

仍在尝试理解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;
char*mesg\u发送;
插座插座;
mesg_to_send=国王死了!";
//建立与echo服务器的连接
if(connect(servSock,(struct sockaddr*)&srvr_addr,sizeof(srvr_addr))<0)
DIEWERROR(“连接()失败”);
send(servSock,(char*)mesg\u to\u send,sizeof(int),0);
服务器端:

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;
char*语句;
插座clnt_插座;
//等待客户端连接
if((clnt_socket=accept(srvr_socket,(struct sockaddr*)&clnt_addr,&addr_len))<0)
DIEWERROR(“接受()失败”);
recv(clnt_socket,char*)语句,sizeof(int),0;

cout马上,您的代码中有几个问题,除了语法错误之外(您的意思是在国王之前有一个开场白吗?)

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

  • 类似地,您只从服务器上的客户端读取
    sizeof(int)
    字节。您可能希望读入更大的缓冲区,并在客户端发送数据时保持循环读取(即,只要您不读取EOF)

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

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

  • 您也可能没有在服务器上初始化
    addr\u len
    (在调用
    recv
    之前,应该将其初始化为
    sizeof(clnt\u addr)