2013-03-18 6 views
4

Я новичок в программировании сокетов и я пытаюсь написать простой разъем, который подключается к другой розетке на моем компьютере (nc -l 35353)гнездо на не-розетке, программа сервера клиента на C

Я постоянно получаю при попытке связать сокет, и я не знаю, как его отладить.


UPDATE: вызов сокета возвращает 0 в качестве дескриптора файла, хотя страница людей не говорит, что это незаконно, я думал, что UNIX/Linux резервного FD 0, 1 и 2 для стандартного ввода, стандартного вывода и stderr по умолчанию. Я не уверен, что это связано с ошибкой привязки, которую я вижу, я просто чувствовал, что это может быть уместно.

Вот код

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<netinet/in.h> 
#include<sys/types.h> 
#include<sys/socket.h> 

//typedef struct sockaddr_in sockaddr_in; 

int main() 
{ 
    int sock_fd; 
    if(sock_fd = socket(AF_INET, SOCK_STREAM, 0) < 0) 
    { 
     perror("Socket Creation error!\n"); 
     return 1; 
    } 
    struct sockaddr_in myaddr; 

    memset((char*)&myaddr, 0, sizeof(myaddr)); 
    myaddr.sin_family = AF_INET; 
    uint32_t myip = (127<<24)|(0<<16)|(0<<8)|1; 
    myaddr.sin_addr.s_addr = htonl(myip); 
    myaddr.sin_port = htons(1337); 

    int binderror = bind(sock_fd, (struct sockaddr*)&myaddr, sizeof(myaddr)); 
    printf("bind error %d\n",binderror); 
    if(binderror < 0) 
    { 
     perror("Bind Error!\n"); 
     return 1; 
    } 

    struct sockaddr_in serveraddr; 

    memset((char*)&serveraddr, 0, sizeof(serveraddr)); 
    serveraddr.sin_family = AF_INET; 
    serveraddr.sin_port = htons(35353); 
    //unsigned char serverip[] = {127,0,0,1}; 
    uint32_t serverip = (127<<24)|(0<<16)|(0<<8)|1; 
    serveraddr.sin_addr.s_addr = htonl(serverip); 

    if(connect(sock_fd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)) < 0){ 
     perror("Could not connect\n"); 
     return 0; 
    } 

} 
+0

И ошибка ... – m0skit0

+3

@ m0skit0 В названии, я подозреваю. – unwind

+0

err ... Если это что-то очень очевидное, я не понял. :( – ffledgling

ответ

3

Ваша задача здесь -

if(sock_fd = socket(AF_INET, SOCK_STREAM, 0) < 0) 

Это старый старшинство, if (a = b == c), как говорят if (a = (b == c))
Это вызов функции, сравнивая его с -1 и присвойте логический результат sock_fd

Wha t вы предполагаете это сделать -

if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
+0

Спасибо за краткое объяснение, одобренное и принятое! – ffledgling

Смежные вопросы