Ich brauche meinen Client, um an einen bestimmten Port zu binden und dann eine Verbindung zu seinem Server herzustellen. Das Problem liegt vor, wenn ich erfolgreich an den angegebenen Port binde, aber keine Verbindung zum Server herstellen kann. Wenn ich nicht versuche, an den Port zu binden, kann ich mich mit dem Server verbinden. Die unten ist mein Programm:Client kann nicht an den angegebenen Port binden und eine Verbindung zum angegebenen Server herstellen
int main()
{
int sock, bytes_recieved;
char send_data[1024],recv_data[1024];
struct hostent *host;
struct sockaddr_in server_addr,client_addr;
host = gethostbyname("127.0.0.1");
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("Socket");
exit(1);
}
client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(4000);
client_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(client_addr.sin_zero),8);
//host = gethostbyname("192.168.61.67");
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(2404);
server_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(server_addr.sin_zero),8);
if (bind(sock, (struct sockaddr *)&client_addr, sizeof(struct sockaddr))== -1)
{
perror("Unable to bind");
exit(1);
}
else
{
fprintf(stderr,"Client bound to 4000\n");
}
if (connect(sock, (struct sockaddr *)&server_addr,
sizeof(struct sockaddr)) == -1)
{
perror("Connect");
exit(1);
}
else
{
printf("Connected to the server\n");
}
while(1)
{
bytes_recieved=recv(sock,recv_data,1024,0);
recv_data[bytes_recieved] = '\0';
if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0)
{
close(sock);
break;
}
else
printf("\nRecieved data = %s " , recv_data);
printf("\nSEND (q or Q to quit) : ");
gets(send_data);
if (strcmp(send_data , "q") != 0 && strcmp(send_data , "Q") != 0)
send(sock,send_data,strlen(send_data), 0);
else
{
send(sock,send_data,strlen(send_data), 0);
close(sock);
break;
}
}
return 0;
}
In diesem Programm, wenn ich localhost verwenden, sowohl für den Client und den Server ich in der Lage bin zu dem Topf zu binden und erfolgreich mit dem Server zu verbinden. Das Problem tritt auf, wenn ich dem Server eine andere IP-Adresse gebe. Bitte schlagen Sie Änderungen am Code vor, um mein Ziel zu erreichen.
Ich denke, es ist client_addr.sin_addr.s_addr = INADDR_ANY; Danke für Ihre Hilfe –