這是我第一次嘗試編寫網絡程序。它編譯沒有問題,但是當我運行它時,它給了我一個'分段錯誤11'。我希望有人能夠讓我知道代碼中可能導致這個問題的原因。分割故障11 - 網絡程序
我在C.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
int main()
{
//////////// GETADDRINFO \\\\\\\\\\\\\\\\
struct addrinfo hints, *res;
memset(&hints, 0 , sizeof hints);
hints.ai_family = AF_UNSPEC; //define the 'hints' strucure
hints.ai_socktype = SOCK_STREAM; //define the 'hints' strucure
hints.ai_protocol = AI_PASSIVE; //define the 'hints' strucure
char *ipaddr = "127.0.0.1";
getaddrinfo(ipaddr, "ftp", &hints, &res);
////////////// SOCKET \\\\\\\\\\\\\\\\
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in info;
int bnd = bind(sock , res->ai_addr, res->ai_addrlen);
info.sin_family = AF_INET;
info.sin_port = htons(10000);
info.sin_addr.s_addr = INADDR_ANY;
bzero(&(info.sin_zero),8);
/////////////// CONNECT \\\\\\\\\\\\\\\\\\\\\\
int conct = connect(sock, res->ai_addr, res->ai_addrlen);
////////////// LISTEN \\\\\\\\\\\\\\\\\\
int lstn = listen(sock , 4);
////////////// ACCEPT \\\\\\\\\\\\\\\\\\\\\\\
int new_fd;
struct sockaddr_storage client_addr;
socklen_t addr_size;
addr_size = sizeof(client_addr);
new_fd = accept(sock, (struct sockaddr *)&client_addr, &addr_size);
///////////////// SEND \\\\\\\\\\\\\\\\\\\\\\
char *msg = "HI!";
int len, bytes_sent;
len = strlen(msg);
bytes_sent = send(sock, msg, len, 0);
//////////////// RECEIVE \\\\\\\\\\\\\\\\\
char burr[254];
int cat = sizeof(burr);
recv(sock, burr , cat , 0);
printf("%s", burr);
return 0;
}
你需要找出確切的所在行失敗,以'printf'等。這是怎麼調試工作。 – jn1kk
您不是錯誤檢查可能失敗的函數,例如'getaddrinfo()'或'recv()'。如果'getaddrinfo()'失敗,它可以很容易地解決分段錯誤。 –
@JonathanLeffler yeeeaah,我犯了懶惰。我想快速寫一些東西來測試它。感謝您的信息 –