4

ソケット プログラミングは初めてで、PC の別のソケットに接続する簡単なソケットを作成しようとしています ( nc -l 35353)

ソケットをバインドしようとするとエラーが発生し続け、デバッグ方法がわかりません。


更新:ソケット呼び出しはファイル記述子として 0 を返していますが、man ページにはこれが違法であるとは記載されていません。UNIX/Linux はデフォルトで stdin、stdout、および stderr 用に fd 0、1、および 2 を予約していると思いました。これが私が見ているバインドエラーと関係があるかどうかはわかりませんが、これが適切かもしれないと感じました.

ここにコードがあります

#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;
    }

}
4

1 に答える 1

3

あなたの問題はここにあります-

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

これは古い優先順位で あり、関数を呼び出し、それを比較してブール結果をに割り当てるif ( a = b == c )と言っているようなものです。if ( a = ( b == c ))
-1sock_fd

あなたがすることを想定していることは-

if( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
于 2013-03-18T18:05:04.327 に答える