TCP/IP接続を確立しています。2台のコンピュータ間でTCP/IPが動作しない
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 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;
}
は、私が最初に./serverを実行し、別の端末で./client
#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:私はこれらのコードを持っています。私は同じコンピュータを使用する場合、それは正常に動作しますが、私は別のコンピュータとクライアント上のサーバーを使用する場合は決して接続します。 私は何が間違っているのか分かりません。多分私は別のIPを使用する必要がありますか?外国のコンピュータでは、コードの一部が異なる必要がありますか?
注:1台のコンピュータはイーサネット搭載のデスクトップで、もう1台はWiFiで同じルータに接続されたラップトップです。
コンピュータ上のOSとは何ですか?ウィンドウの場合は、ファイアウォールを無効にしてください。linuxの場合は、iptables上のそのポートを有効にしてください。サーバーとクライアントは同じマシン上で正常に動作するため、問題はおそらく別の場所にあります。 –