我在寫一個簡單的客戶端服務器程序。我的服務器收到一條消息並將其打印到stdout中。收到消息的客戶端分段錯誤
客戶端代碼:
...
int message_length = strlen(message);
sent_bytes = send(socket, &message_length, sizeof(int), 0);
<... check ...>
sent_bytes = send(socket, message, strlen(message)*sizeof(char), 0);
<... check ...>
...
Server代碼:
...
got_bytes = recv(socket, &message_length, sizeof(int), 0);
<... check ...>
message = malloc((message_length+10)*sizeof(char));
got_bytes = recv(socket, &message, message_length*sizeof(char), 0);
<... check ...>
printf("Length: %d\n", message_length);
strcat(message, '\0');
printf("%s\n", message);
...
執行:
$ ./client Message!
$ ./server
Length: 8
Segmentation fault
這究竟是爲什麼?
消息最初是以null結尾的嗎?嘗試用'message [message_length] = 0'代替strcat。或者讓客戶端發送帶有\ 0的消息作爲數據包的一部分。 – Ryan