LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1452|回复: 15

能否在一台电脑上同时使用服务器和客户端的程序?

[复制链接]
发表于 2004-9-8 10:59:23 | 显示全部楼层 |阅读模式
正在学socket编程,server和client的程序编译好了以后能不能在同一台机子上进行通信?
发表于 2004-9-8 11:09:03 | 显示全部楼层
当然可以了
 楼主| 发表于 2004-9-8 12:29:15 | 显示全部楼层
哦,我试了一下,先运行./server
然后打开另一个终端运行./client localhost
可是两个程序都挂在那里了,没有显示应有的字符串
发表于 2004-9-8 12:39:55 | 显示全部楼层
首先,你确保在两台机器的情况下,程序一定可以正常执行?
 楼主| 发表于 2004-9-8 13:14:12 | 显示全部楼层
这个。。我只有一台电脑阿,
我编译的是一个教程的例子,应该没问题吧
我用hostname返回的是debian,那我的localhost就应该是debian了吧,可是他说gethostbyname返回的是null
难道要到root下?
 楼主| 发表于 2004-9-8 13:44:04 | 显示全部楼层
客户端的代码如下:

  1. #include<stdio.h>
  2. #include<sys/errno.h>
  3. #include<sys/types.h>
  4. #include<unistd.h>
  5. #include<sys/socket.h>
  6. #include<fcntl.h>
  7. #include<netinet/in.h>
  8. #include<netdb.h>
  9. #define PORTNUMBER 3333

  10. int main(int argc, char *argv[])
  11. {
  12.         int sockfd;
  13.         char buffer[1024];
  14.         struct sockaddr_in server_addr;
  15.         struct hostent *host;
  16.         int nbytes;
  17.         if(argc!=2)
  18.         {
  19.                   fprintf(stderr,"Usage:%s hostname\a\n",argv[0]);
  20.                   exit(1);
  21.         }

  22.         if((host=gethostbyname(argv[1]))==NULL)
  23.         {
  24.                 fprintf(stderr,"Gethostname error\n");
  25.                 exit(1);
  26.         }

  27.         /* 客户程序开始建立 sockfd描述符  */   
  28.         if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
  29.         {
  30.                        fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
  31.                 exit(1);
  32.         }

  33.         /* 客户程序填充服务端的资料       */
  34.         bzero(&server_addr,sizeof(server_addr));
  35.         server_addr.sin_family=AF_INET;
  36.         server_addr.sin_port=htons(PORTNUMBER);
  37.         server_addr.sin_addr=*((struct in_addr *)host->h_addr);
  38.         //server_addr.sin_addr.s_addr=INADDR_ANY;

  39.         /* 客户程序发起连接请求         */
  40.         if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
  41.         {
  42.                   fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
  43.                   exit(1);
  44.         }

  45.         /* 连接成功了           */
  46.         if((nbytes=read(sockfd,buffer,1024))==-1)
  47.         {
  48.                 fprintf(stderr,"Read Error:%s\n",strerror(errno));
  49.                 exit(1);
  50.         }
  51.         buffer[nbytes]='\0';
  52.         printf("I have received:%s\n",buffer);
  53.         /* 结束通讯     */
  54.         close(sockfd);
  55.         exit(0);
  56. }

复制代码
 楼主| 发表于 2004-9-8 13:46:47 | 显示全部楼层
那个host应该就是hostname返回的值吧,可是我./client debian他显示:
Gethostname error
发表于 2004-9-8 14:15:12 | 显示全部楼层
用ip。你的机器名明显是不能解析的(你没注册过吧)。或者你在/etc/hosts里面写了
 楼主| 发表于 2004-9-8 18:36:04 | 显示全部楼层
没错没错,在/etc/hosts里是写着debian
为啥不能解析呢?啥叫注册,难道要像xp一样?
发表于 2004-9-8 18:54:09 | 显示全部楼层
看看gethostbyname的帮助吧,我记不清它是不是受本地设置的影响了,如果是的话,要是你的域名解析的顺序(/etc/nsswitch.conf)不是设置的本机优先,那它还是会先去查询域名服务器,结果就是找不到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表