【发布时间】:2017-02-09 04:40:21
【问题描述】:
我正在建立 TCP/IP 连接。我有这些代码:
服务器.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;
}
我首先在另一个终端运行 ./server,然后运行 ./client。如果我使用同一台计算机,它工作正常,但如果我想在一台计算机上使用服务器并在另一台计算机上使用客户端,它永远不会连接。 我不知道我做错了什么。也许我必须使用另一个IP?国外电脑一定有部分代码不一样?
注意:一台电脑是带以太网的台式机,另一台是笔记本电脑,通过 WiFi 连接到同一路由器。
【问题讨论】:
-
电脑上的操作系统是什么?如果是 Windows,请尝试禁用防火墙,如果是 linux,请在 iptables 或任何防火墙上启用该端口。由于服务器和客户端在同一台机器上正常工作,问题可能出在其他地方。
标签: tcp server ip client protocols