我有一個服務器/ CLient套接字編程模型的問題。在同一臺計算機上,我有一臺服務器運行在一個程序上,客戶端運行另一臺程序。服務器/客戶端通過地址0.0.0.0和端口3000進行通信。通信正常。但是,當我有服務器程序運行一個系統和運行在另一個系統上的客戶端程序(兩臺不同的計算機,並且它們都支持Wifi)時,Socket編程模型不再適用於我了。套接字編程只適用於同一系統,不適用於不同的系統
這是爲什麼?
portno=30000;
serv_addr.sin_family = AF_INET;
char *srvr_addr=NULL;
srvr_addr="0.0.0.0";
inet_addr(srvr_addr);
serv_addr.sin_addr.s_addr =inet_addr(srvr_addr);
serv_addr.sin_port = htons(portno);
bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
listen(sockfd,5);
while (1)
{
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
客戶端
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
portno=3000;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
server = gethostbyname("0.0.0.0");
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
//source, destination
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(30000);
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
int result;
result=connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
bzero(buffer,256);
n = read(sockfd,buffer,255);
你有「還挺」給了我們服務器端的代碼。如果我在服務器端使用htonl(INADDR_ANY),防火牆/路由器等是否會與客戶端「代碼」 –
@Paul一起計入公式中,那麼客戶端應該使用什麼?現在我有server = gethostbyname(「0.0.0.0」); – lilzz
@lilzz:看到我的回答,無論您在服務器上使用什麼,都無法在客戶端使用「0.0.0.0」。 –