【发布时间】:2019-02-25 07:59:01
【问题描述】:
您好,我是套接字编程的新手,我正在尝试从我的客户端接收用户名。我目前在我的服务器文件中写入了以下方法:
/* Reads a message from the server socket. */
char *recv_msg(int sockfd)
{
char *msg;
/* All messages are 9 bytes. */
memset(msg, 0, 8);
int n = read(sockfd, msg, 8);
if (n < 1 || n >9) /* Not what we were expecting. Server got killed or the other client disconnected. */
error("ERROR reading message from server socket.");
return msg;
}
我这样调用我的函数:
/* Authentication Process */
write(cli_sockfd[num_conn], "USN", sizeof(int));
char *username;
username = recv_msg(cli_sockfd[num_conn]);
printf("[DEBUG] Client username is %s.\n", username);
我知道客户成功收到“USN”消息,但我收到“分段错误:11”,我相信 username = recv_msg(cli_sockfd[num_conn]); 上有人可以解释并帮助我解释为什么吗?
【问题讨论】:
-
介于
char *msg;和memset(msg, 0, 8);之间的某个位置,最好将msg变量设置为指向至少八个字节。请张贴minimal reproducible example。
标签: c sockets tcp client-server