2012-02-01 19 views
12

Tôi đang theo cùng với hướng dẫn của beej để kết nối mạng và nó được thực hiện tốt bởi vì tôi hiểu mọi thứ rất tốt và anh ấy giải thích nó tuyệt vời. Tuy nhiên, khi tôi muốn thử nghiệm một số điều tuyệt vời anh ấy cho tôi thấy, nó sẽ không hoạt động. :(sockaddr_in undeclared identifier

Tôi không chắc chắn nơi chính xác sockaddr_in được khai báo nhưng có lẽ ai đó ở đây như vậy sẽ giúp tôi ra!

Dưới đây là những gì tôi đã cho đến nay (thử nghiệm ra chuyển đổi một ip ở dạng chuỗi để một ip để một 4 byte không thể thiếu và ngược lại):

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netdb.h> 

int main(void) 
{ 
    sockaddr_in sin; 

    inet_pton(AF_INET, "192.168.2.1", &sin.in_addr); 
    char ip[INET_ADDRSTRLEN]; 
    inet_ntop(AF_INET, &sin.in_addr, ip, INET_ADDRSTRLEN); 
    printf("%s\n", ip); 

    return 0; 
} 

một lần nữa tôi hoàn toàn tránh khỏi thất bại như là nơi tất cả mọi thứ là vì vậy nếu nó là một cái gì đó thực sự ngu ngốc trên một phần của tôi, xin lỗi

chỉnh sửa: tôi đang trên một Debian Linux distro được gọi là Mint nếu điều đó giúp ích cho tất cả?

Trả lời

22

The standard nói:

Tiêu đề phải xác định cấu trúc sockaddr_in

Bạn phải bao gồm <netinet/in.h> và tuyên bố sin như thế này:

struct sockaddr_in sin; 
^^^^^^ 

Để tìm hiểu lý do tại sao bạn cần từ khóa struct, xem điều này C FAQ. câu chuyện dài ngắn, không có ngầm typedef trong C.

+0

rằng cố định vấn đề chính của tôi! netinet/in.h - ghi lại, cảm ơn! nevermind về các lỗi khác tôi đặt in_addr thay vì s_addr: p – user1169094

4

Theo ip(7) trang người đàn ông, bạn cũng cần

#include <sys/socket.h> 
    #include <netinet/in.h> 
    #include <netinet/ip.h> 
+0

đọc hầu hết các mô tả và không hiểu nhiều, nhưng tôi chắc chắn sẽ sử dụng những trang người đàn ông đó để tham khảo trong tương lai về những thứ đơn giản như thế này. cảm ơn! – user1169094

Các vấn đề liên quan