当前位置:  技术问答>linux和unix

谁能帮我调调这个简单的程序?急!!!

    来源: 互联网  发布时间:2015-01-30

    本文导语:  最近当开始学习在Linux平台下写程序,现在写了一个Socket程序。是C/S模式,实现的功能是客户端一旦与服务器连接成功,服务器就向客户发送一个字符串:"hello world!"。不过始终调不过。我也不知道哪儿出了错,还请哪...

最近当开始学习在Linux平台下写程序,现在写了一个Socket程序。是C/S模式,实现的功能是客户端一旦与服务器连接成功,服务器就向客户发送一个字符串:"hello world!"。不过始终调不过。我也不知道哪儿出了错,还请哪位高手帮我调调。谢谢先!

另外还想问的是:我用命令man想查询关于结构sockaddr_in的资料,键入!man 1(或2或3) sockaddr_in都查不到。那我应该怎样查?

程序如下:

服务器端:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define MYPORT 4000
#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=INADDR_ANY; //任何地址
     bzero(&(my_addr.sin_zero),8);
     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;
     }
     if(!fork())//子进程
     {
     if(send(new_fd,"hello,world!",14,0)==-1)
     {
     perror("send");
     close(new_fd);
     exit(0);
     }
     close(new_fd);
     }
     }
}


客户端:

#include 
#include 
#include 
#include 
#include 
#include 
#include    
#define PORT 5000
#define MAXDATASIZE 100
int main(int argc,char *argv[])
{
    int sockfd,numbytes;
    char buf[MAXDATASIZE];
    struct hostent *he;
    struct sockaddr_in their_addr;
    if(argc!=2)
    {
fprintf(stderr, "usage:client hostname");
exit(1);
}
    if((he=gethostbyname(argv[1])) == NULL)
    {
perror("gethostbyname");
exit(1);
}
    their_addr.sin_family=AF_INET;
    their_addr.sin_port=htons(PORT);
    their_addr.sin_addr=(struct in_addr *)he->h_addr;//(这一行报错)
    bzero(&(their_addr.sin_zero),8);
    if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1)
    {
perror("connect");
exit(1);
}
    if((numbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1)
    {
perror("recv");
exit(1);
}
    buf[numbytes] = ' ';
    printf("%s",buf);
    return 0;
}

|
这种结构用man是看不了的
  struct sockaddr_in{
   short sin_family;/*socket()系统调用的协议族如AF_INET*/
   u_short sin_port;/*网络字节次序形式的端口号码*/
   struct in_addr sin_addr;/*网络字节次序形式的网络地址*/
   char sin_zero[8];
  }
只有上网找

|
你在    their_addr.sin_addr=(struct in_addr *)he->h_addr;//(这一行报错)
试试这个看,
bcopy(he->h_addr,&their_addr.sin_addr,he->h_length);

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,