【问题标题】:Socket operation on non-socket, Client server program in C非套接字上的套接字操作,C中的客户端服务器程序
【发布时间】:2013-03-07 02:36:41
【问题描述】:

我是套接字编程的新手,我正在尝试编写一个简单的套接字来连接我 PC 上的另一个套接字 (nc -l 35353)

我在尝试绑定套接字时不断收到错误,我不知道如何调试它。


更新: 套接字调用返回 0 作为文件描述符,虽然手册页没有说这是非法的,但我认为 unix/linux 为 stdin、stdout 保留 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;
    }

}

【问题讨论】:

  • @m0skit0 在标题中,我怀疑。
  • err... 如果这是非常明显的事情,我没有明白。 :(
  • 使用 inet_addr("127.0.0.1")
  • 试过 myip = inet_addr("127.0.0.1")。仍然得到同样的错误。
  • 试试 -> if( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0){..}...

标签: c sockets


【解决方案1】:

你的问题在这里-

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

这是旧的优先级, if ( a = b == c ) 就像说 if ( a = ( b == c ))
它正在调用函数,将其与 -1 进行比较并将布尔结果分配给 sock_fd

你应该做的是-

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 2017-05-26
    • 2019-03-17
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2012-06-24
    相关资源
    最近更新 更多