如何解决如何在套接字编程中重用地址?
我无法执行我的套接字编程代码,因为它显示错误“无法绑定:地址已在使用中”。
客户端代码:
#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;
}
实际上,它是一个汉明代码程序,可从一侧获取数据并将其转换为汉明代码。我检查了没有套接字编程部分的汉明代码部分,它可以正常工作。问题出在套接字编程部分。
因此,感谢您的任何帮助,并在此先感谢您
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。