如何在套接字编程中重用地址?

问题描述

我无法执行我的套接字编程代码,因为它显示错误“无法绑定:地址已在使用中”。

客户端代码

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

//define h_addr h_addr_list[0]

int main()
{
    int sock,bytes_recived;
    char send_data[1024],recv_data[1024];
    struct hostend *host;
    struct sockaddr_in server_addr;
    int i;

    host = gethostbyname("127.0.1.1");

    if ((sock = socket(AF_INET,SOCK_STREAM,0)) == -1)
    {
        perror("Socket");
        exit(1);
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(0401);
    server_addr.sin_addr = *((struct in_addr *)host->h_addr);
    bzero(&(server_addr.sin_zero),0);

    if (connect(sock,(struct sockaddr *)&server_addr,sizeof(struct sockaddr)) == -1)
    {
        perror("Connect");
        exit(1);
    }

    char data[10];
    printf("Enter the data ");
    scanf("%s",&data[0]);
    scanf("%s",&data[1]);
    scanf("%s",&data[2]);
    scanf("%s",&data[4]);

    data[6] = data[4] ^ data[2] ^ data[0];
    data[5] = data[4] ^ data[1] ^ data[0];
    data[3] = data[2] ^ data[1] ^ data[0];

    printf("encoded hamming code is = %s",data);

    printf("enter recieved data one by one \n");
    for (i = 0; i < 7; i++)
    {
        scanf("%s",&data[i]);
    }
    send(sock,data,2000,0);
    return 0;
}

服务器端代码

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <errno.h>

int main()
{
    int sock,connected,bytes_recieved,true = 1,i;
    char send_data[1024],recv_data[1024],buffer[20];
    int c1,c2,c3,c,pos;
    struct sockaddr_in server_addr,client_addr;
    int sin_size;

    if ((sock = socket(AF_INET,0)) == -1)
    {
        perror("Socket");
        exit(1);
    }

    if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1)
    {
        perror("Setsockopt");
        exit(1);
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(9500);
    server_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(server_addr.sin_zero),8);

    if (bind(sock,sizeof(struct sockaddr)) == -1)
    {
        perror("Unable to bind");
        exit(1);
    }

    if (listen(sock,5) == -1)
    {
        perror("Listen");
        exit(1);
    }

    printf("\n TCP Server Waiting for the Client");
    fflush(stdout);

    sin_size = sizeof(struct sockaddr_in);

    connected = accept(sock,(struct sockaddr *)&client_addr,&sin_size);
    printf("I got a connection from (%s,%d)",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));

    bytes_recieved = recv(connected,recv_data,1024,0);

    recv_data[bytes_recieved] = '\0';

    printf("recieved encoded   data is = %s ",recv_data);

    c1 = recv_data[6] ^ recv_data[4] ^ recv_data[2] ^ recv_data[0];
    c2 = recv_data[5] ^ recv_data[4] ^ recv_data[1] ^ recv_data[0];
    c3 = recv_data[3] ^ recv_data[2] ^ recv_data[1] ^ recv_data[0];
    pos = c1 + c2 * 2 + c3 * 4;
    printf("%d",pos);
    if (pos == 0)
    {
        printf("the recieved data is error free");
    } else {
        printf("the wrong data is %s \n",&recv_data);
        if (recv_data[7 - pos] == '1')
        {
            recv_data[7 - pos] = '0';
        }
        else
        {
            recv_data[7 - pos] = '1';
        }
    }
    for (int i = 0; i < 7; i++)
    {
        printf("%c",recv_data[i]);
    }
    close(sock);
    return 0;
}

实际上,它是一个汉明代码程序,可从一侧获取数据并将其转换为汉明代码。我检查了没有套接字编程部分的汉明代码部分,它可以正常工作。问题出在套接字编程部分。

this is the output which I got

因此,感谢您的任何帮助,并在此先感谢您

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)