+ -
当前位置:首页 → 问答吧 → socket总是无法成功

socket总是无法成功

时间:2010-09-07

来源:互联网

本帖最后由 云少嘎嘎嘎 于 2010-09-07 15:53 编辑

在书上看了一个例子,但是总是调不通,代码如下:
client:
  1. #include<stdio.h>
  2. #include<arpa/inet.h>
  3. #include<stdlib.h>
  4. #include<errno.h>
  5. #include<unistd.h>
  6. #include<string.h>
  7. #include<sys/types.h>
  8. #include<netinet/in.h>
  9. #include<sys/socket.h>
  10. #include<sys/wait.h>
  11. int main(int argc,char*argv[]){
  12.   int sockfd,numbytes;
  13.   char buf[100];
  14. // struct hostent *he;
  15.   struct sockaddr_in their_addr;
  16.   int i=0;
  17. // he=gethostbyname(argv[1]);
  18.   if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
  19.      perror("socket");
  20.      exit(1);
  21.   }
  22.   their_addr.sin_family=AF_INET;
  23.   their_addr.sin_port=htons(2323);
  24.   their_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
  25.   bzero(&(their_addr.sin_zero),8);
  26.   if(connect(sockfd,(struct sockaddr*)&their_addr,sizeof(struct sockaddr))==-1)
  27.   {
  28.     perror("connect");
  29.     exit(1);
  30.   }
  31.   if(send(sockfd,"hello!",6,0)==-1)
  32.   {
  33.     perror("send");
  34.     exit(1);
  35.   }
  36.   if((numbytes=recv(sockfd,buf,100,0))==-1)
  37.   {
  38.     perror("recv");
  39.     exit(1);
  40.   }
  41.    printf("result:%s",buf);
  42.   close(sockfd);
  43.   return 0;
  44. }
复制代码
server:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<errno.h>
  4. #include <unistd.h>
  5. #include<string.h>
  6. #include<sys/types.h>
  7. #include<netinet/in.h>
  8. #include<sys/socket.h>
  9. #include<sys/wait.h>
  10. main(){
  11.   char buff[6];
  12.   int sockfd,new_fd;
  13.   struct sockaddr_in my_addr;
  14.   struct sockaddr_in their_addr;
  15.   socklen_t sin_size;
  16.   if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
  17.     perror("socket");
  18.     exit(1);
  19.   }
  20.   my_addr.sin_family=AF_INET;
  21.   my_addr.sin_port=htons(2323);
  22.   my_addr.sin_addr.s_addr=INADDR_ANY;
  23.   bzero(&(my_addr.sin_zero),8);
  24.   if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1)
  25.   {
  26.     perror("bind");
  27.     exit(1);
  28.   }
  29.   if(listen(sockfd,10)==-1){
  30.      perror("listen");
  31.      exit(1);
  32.   }
  33.   while(1){
  34.     sin_size=sizeof(sockaddr_in);
  35.     perror("server is run");
  36.    if((new_fd= accept(sockfd,(struct sockaddr*)&their_addr,&sin_size))==-1)
  37.    {
  38.         perror("accept");
  39.         exit(1);
  40.     }
  41.     if(!fork()){
  42.        if((recv(new_fd,buff,strlen(buff),0))==-1)
  43.        {
  44.           perror("recv");
  45.           exit(1);
  46.        }
  47.        printf("%s",buff);
  48.        if(send(new_fd,buff,strlen(buff),0)==-1)
  49.          perror("send");
  50.        close(new_fd);
  51.        exit(0);
  52.     }
  53.     close(new_fd);
  54.   }
  55.   close(sockfd);
  56. }
复制代码
首先运行server,然后运行client后在server端显示:Server is run: Illegal seek
上网找了半天也不知道到底错在哪,各位帮忙看一下吧。谢谢。

作者: 云少嘎嘎嘎   发布时间: 2010-09-07

回复 云少嘎嘎嘎
server程序有问题,编译失败。
将34行的sockaddr_in改成struct sockaddr_in即可。
运行没问题。
也可能你的系统有问题。。。

作者: donglongchao   发布时间: 2010-09-07

回复 donglongchao


    谢谢你的帮助,但在我的系统上能编译成功。我刚才把server的的第35行去掉,就不报错了,呵呵。

作者: 云少嘎嘎嘎   发布时间: 2010-09-07

回复 云少嘎嘎嘎


    那是必然的。

作者: robin254817   发布时间: 2010-09-07

作者: donglongchao   发布时间: 2010-09-07

相关阅读 更多

热门下载

更多