免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1742 | 回复: 0
打印 上一主题 下一主题

[新手入门] socket编程 初学 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-09 15:38 |只看该作者 |倒序浏览
郁闷,aix5.2 xlc编译


test.c testclient.c  

test.c编译没有问题。客户端提示错误见程序最后两行注释。请帮忙解决,谢谢!


test.c

#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 34900
#define MAXBUFLEN 100
main()
{
        int sockfd;
        struct sockaddr_in my_addr;
        struct sockaddr_in their_addr;
        int numbytes;
        unsigned long addr_len;
        char buf[MAXBUFLEN];
        if((sockfd=socket(AF_INET,SOCK_DGRAM,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));
        if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1){
                perror("bind");
                exit(1);
        }
        addr_len=sizeof(struct sockaddr);
        if((numbytes=recvfrom(sockfd,buf,MAXBUFLEN,0,(struct sockaddr*)&their_addr,&addr_len))==-1){
                perror("recvfrom");
                exit(1);
        }
        printf("got packet from %s\n",inet_ntoa(their_addr.sin_addr));
        printf("packet is %d bytes long\n",numbytes);
        buf[numbytes]='\0';
        printf("packet contains \"%s\"\n",buf);
        close(sockfd);
}



testclient.c


#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 34900
int main(int argc,char *argv[])
{
        int sockfd;
        struct sockaddr_in their_addr;
        struct hostent *he;
        int numbytes;
        if(argc !=3){
                fprintf(stderr,"usage:talker hostname message\n");
                exit(1);
        }
        if((he->h_addr=gethostbyname(argv[1]))==NULL){
                herror("gethostbyname");
                exit(1);
        }



        

        if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1){
                perror("socket");
                exit(1);
        }
        their_addr.sin_family=AF_INET;
        their_addr.sin_port=htons(MYPORT);
        
        their_addr.sin_addr=*((struct in_addr*)he->h_addr);
        //        their_addr.sin_addr.s_addr=1721613926;

        bzero(&(their_addr.sin_zero));
        if((numbytes=sendto(sockfd,argv[2],strlen(argv[2]),0,(struct sockaddr*)&their_addr,sizeof(struct sockaddr)))==-1){
                perror("sendto");
                exit(1);
        }
        printf("send %d bytes to %s\n",numbytes,inet_ntoa(their_addr.sin_addr));
        close(sockfd);
        return 0;
}


/*
if ( phe = gethostbyname( uTcpIpAddr ) )
                        memcpy( &serv_addr.sin_addr,
                                phe->h_addr,phe->h_length );
                                
"testclient.c", line 20.13: 1506-285 (S) The indirection operator cannot be applied to a pointer to an incomplete struct or union.
"testclient.c", line 30.56: 1506-285 (S) The indirection operator cannot be applied to a pointer to an incomplete struct or union.
*/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP