基本发送()和接收()TCP服务器和客户端C++;
仍在尝试理解send()和recv()函数。为什么这不起作用?服务器输出上没有打印任何内容。(除了一些测试“cout”之外) 这基本上是我正在处理的代码的一部分 客户端:基本发送()和接收()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 *)
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)
)