Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 绑定失败,参数错误无效_C_Sockets_Binding - Fatal编程技术网

C 绑定失败,参数错误无效

C 绑定失败,参数错误无效,c,sockets,binding,C,Sockets,Binding,这是最后一段代码,没有编译错误,但我仍然收到“无效参数”错误 ======================================================================== 包括 使用名称空间std; #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 内部主(内部argc、字符**argv、字符**envp){ int x25_插座; 结构sockaddr_x25x25_address={0}; char x25_主机[]=“10.0.0.

这是最后一段代码,没有编译错误,但我仍然收到“无效参数”错误 ========================================================================

包括
使用名称空间std;
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
内部主(内部argc、字符**argv、字符**envp){
int x25_插座;
结构sockaddr_x25x25_address={0};
char x25_主机[]=“10.0.0.1”;
const char name[]=“我的名字”;
x25_address.sx25_family=AF_x25;
x25_插座=插座(AF_x25,插座序列包,0);
如果(x25_插槽==-1)
cout假设这是C(正如@Doorknob指出的(+1)),这有两个编译错误。请修复它们。例如,同一变量名的两部分之间有一个空格。因此,下面几行:

   int x25 socket;
   struct sockaddr x25 address;
   int x25 length;
   char x25 host[] 
应该是:

   int x25_socket;
   struct sockaddr_x25 x25_address;
   int x25_length;
   char x25_host[] 
除此之外,我没有发现bind()本身存在任何逻辑缺陷。

请尝试以下方法:

int main(int argc, char **argv, char **envp)
{
    struct sockaddr_x25 x25_address = {0};
    char x25_host[] = "10.0.0.1"
    const char name[] = "my name";

    int x25_socket = socket(AF_X25, SOCK_SEQPACKET, 0);
    if(x25_socket == -1)
    {
        printf(" error in create socket");
    }

    x25address.safamily = AF_X25;
    strncpy(x25_address.sx25_addr.x25_addr, x25_host, 16);

    int bindNumber = bind(x25_socket, (struct sockaddr*)&x25_address, sizeof(x25_address));
    if (bindNumber == -1)
    {
        perror("error in bind ---");
    }

    return 0;
}

什么编程语言?您的代码不编译,但您不需要在字符串文本中指定尾随null。编译器为您提供免费的。
sockaddr\u in
仅用于
AF\u INET
。对于
AF\u X25
,您必须使用
sockaddr\u X25
。因此,在OP的代码中,
struct sockaddr X25 a地址
可能是
struct sockaddr\u x25地址
而不是
struct sockaddr x25\u地址
。“应该是”答案中的部分仍然是
sockaddr
,需要改为
sockaddr\u x25
。它们不是同一个结构。我为您修复了它。编译错误!!41:错误:请求“x25\u地址”中的成员“x25\u addr”。sockaddr\u x25::sx25\u family”,这是非类类型的“sa\u family\t”,对不起,我的拼写错误。
sx25\u系列
应为
sx25\u地址
int main(int argc, char **argv, char **envp)
{
    struct sockaddr_x25 x25_address = {0};
    char x25_host[] = "10.0.0.1"
    const char name[] = "my name";

    int x25_socket = socket(AF_X25, SOCK_SEQPACKET, 0);
    if(x25_socket == -1)
    {
        printf(" error in create socket");
    }

    x25address.safamily = AF_X25;
    strncpy(x25_address.sx25_addr.x25_addr, x25_host, 16);

    int bindNumber = bind(x25_socket, (struct sockaddr*)&x25_address, sizeof(x25_address));
    if (bindNumber == -1)
    {
        perror("error in bind ---");
    }

    return 0;
}