- 论坛徽章:
- 0
|
问题描述:
1,下面是一个linux socket程序,命名aaa.c已经成功编译。
2,程序测试经过:虚拟机上一个linux系统(以ip区别之,ip1)运行aaa,在另一系统终端输入telnet ip1
3490,会收到“hello word”的信息。
3,现在的状况:同一个系统开两个终端,终端1,运行aaa,终端2,输入telnet ip 3490。终端2收到
“hello word”.
4,问题是:用两个系统测试,ip2却提示:no route to host.
5,说明:在运行aaa的系统上,已经安装telnet服务器,并且远程telnet没问题。
改变虚拟机网卡模式也测试过,不行。(bridged--NAT)
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define MYPORT 3490
#define BACKLOG 10
main()
{
int sockfd, new_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bzero(&(my_addr.sin_zero),0);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1) {
perror("bind");
exit(1);
}
if (listen(sockfd, BACKLOG) == -1) {
perror("listen");
exit(1);
}
while(1) {
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr,&sin_size)) == -1) {
perror("accept");
continue;
}
printf("server: got connection from %s\n",inet_ntoa(their_addr.sin_addr));
if (!fork()) {
if (send(new_fd, "Hello, world!\n", 14, 0) == -1)
perror("send");
close(new_fd);
exit(0);
}
close(new_fd);
while(waitpid(-1,NULL,WNOHANG) > 0);
}
}
[ 本帖最后由 black_billow08 于 2008-9-23 09:32 编辑 ] |
|