Ich mache eine TCP/IP-Verbindung. Ich habe diese Codes:TCP/IP funktioniert nicht zwischen zwei Computern
server.c
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include<fcntl.h>
int main(){
int serverid, clientid, n = 0, len;
char msgsend[512], msgrecv[512];
struct sockaddr_in server,client;
serverid = socket(AF_INET, SOCK_STREAM, 0);
if (serverid < 0) {
puts("Error creating socket\n");
return -1;
}
memset(&server, 0, sizeof(server));
memset(msgrecv, 0, sizeof(msgrecv));
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(5000);
if(bind(serverid, (struct sockaddr*)&server, sizeof(server)) < 0) {
printf("Error binding\n");
return -1;
}
if(listen(serverid, 10) < 0){
printf("ERROR");
return -1;
}
len = sizeof(client);
clientid = accept(serverid, (struct sockaddr*)&client, &len);
if (clientid < 0) {
printf("Connection error\n");
return -1;
}
puts("Connected to client");
while(1){
n = recv(clientid, msgrecv, sizeof(msgrecv) - 1, 0);
if(n < 0){
printf("Error while reading...\n");
return -1;
}
printf("client says:\n");
msgrecv[n] = 0;
fputs(msgrecv, stdout);
printf("\n");
printf("enter your reply\n");
gets(msgsend);
send(clientid, msgsend, sizeof(msgsend) - 1, 0);
printf("\n");
}
return 0;
}
client.c
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
int main(){
int sock, n = 0;
char msgsend[512], msgrecv[512];
struct sockaddr_in server;
memset(&server, 0, sizeof(server));
memset(msgrecv, 0, sizeof(msgrecv));
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == -1){
printf("Could not create a socket!\n");
return -1;
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("192.168.112.130");
server.sin_port = htons(5000);
printf(" Trying to connect...\n");
if(connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0){
printf("Error:Connection failed\n");
return -1;
}
printf("Connected\n");
while(1){
printf("please enter your reply\n");
gets(msgsend);
send(sock, msgsend, sizeof(msgsend) - 1, 0);
n = recv(sock, msgrecv, sizeof(msgrecv) - 1, 0);
if(n < 0){
printf("Read error\n");
}
printf("\n");
printf("server says:");
msgrecv[n] = 0;
fputs(msgrecv, stdout);
printf("\n");
}
return 0;
}
ich zum ersten Mal ./server laufen und dann in einem anderen Endgerät ./client. Wenn ich den gleichen Computer benutze, funktioniert es gut, aber wenn ich den Server auf einem Computer und den Client auf einem anderen verwenden möchte, verbindet er sich nie. Ich weiß nicht, was ich falsch mache. Vielleicht muss ich eine andere IP verwenden? Ein Teil des Codes muss für ausländische Computer anders sein?
Hinweis: Ein Computer ist ein Desktop mit Ethernet und der andere ist ein Laptop, der über WiFi mit demselben Router verbunden ist.
Was ist das Betriebssystem auf den Computern? Wenn es Windows ist, versuchen Sie, die Firewall zu deaktivieren, wenn Linux, aktivieren Sie diesen Port auf iptables oder was auch immer Firewall es ist. Da der Server und der Client auf demselben Computer ordnungsgemäß funktionieren, liegt das Problem wahrscheinlich an einem anderen Ort. –