免费注册 查看新帖 |

Chinaunix

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

网络编程过程很郁闷的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-07 21:11 |只看该作者 |倒序浏览
#include        <ourhdr.h>;
#include        <sys/socket.h>;          /*elementry socket fuctions*/
#include        <netinet/in.h>;
#include        <arpa/inet.h>;           /*contain fuc:inet_ntop,inet_pton*/
#include        <myfuc.h>;               /*self-defined fuctions*/
void
cli_handle(FILE *fp,int s);
main(int argc,char **argv)
{
    int sockfd;
    struct sockaddr_in servaddr;
    if(argc!=2)
        err_sys("useage:a.out <remote machine'ip>;";
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family=AF_INET;
    servaddr.sin_port=htons(9877);
    if(inet_pton(AF_INET,argv[1],&(servaddr.sin_addr))<=0)
        err_sys("inet_pton error";
    sockfd=Socket(AF_INET,SOCK_STREAM,0);
    Connect(sockfd,(SA *)&servaddr,sizeof(servaddr));
    cli_handle(stdin,sockfd);
    exit(0);
}
void
cli_handle(FILE *fp,int s)
{
    char   sendline[MAXLINE],recvline[MAXLINE];
    while(fgets(sendline,MAXLINE,fp)!=NULL){
        writen(s,sendline,strlen(sendline));
    if(readline(s,recvline,MAXLINE)==0){
        printf("server terminated prematurely";
        exit(0);
    }
    fputs(recvline,stdout);
    }
}
above::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::client source..



#include        <ourhdr.h>;
#include        <sys/socket.h>;
#include        <netinet/in.h>;
#include        <arpa/inet.h>;
#include        <myfuc.h>;
void serv_handle(int sockfd);
main()
{
    int listenfd,connfd;
    struct sockaddr_in servaddr,addr;
    socklen_t len;
    listenfd=Socket(AF_INET,SOCK_STREAM,0);     /*tcp server,so this*/
    servaddr.sin_family=AF_INET;
    servaddr.sin_port=htons(9877);
    servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    Bind(listenfd,(SA *)&servaddr,sizeof(servaddr));
    Listen(listenfd,64);
    for(;  ; ){
        len=sizeof(addr);
        connfd=Accept(listenfd,(SA *)&addr,&len);
        if(fork()==0){          /*child*/
            close(listenfd);
            serv_handle(connfd);
            close(connfd);
        }
        close(connfd);
    }
}
void
serv_handle(int sockfd)
{
    ssize_t n;
    char    line[MAXLINE];
    for(; ; ){
    if((n=readline(sockfd,line,MAXLINE))==0)
        return;
    writen(sockfd,line,n);
    }
}
above::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;server source



#include <ourhdr.h>;
#include <sys/socket.h>;
void
err_sys(char *ptr)
{
    printf("%s",ptr);
    exit(0);
}
ssize_t
readline(int fd,void *vptr,size_t maxlen)
{
    ssize_t rc,n;
    char     c,*ptr;
    ptr=vptr;
    for(n=1;n<maxlen;n++){
        if((rc=read(fd,&c,1))==1){
            *ptr=c;
            if(c=='\n')
            break;
        }
        else if(rc==0){
            if(n==1)
                return(0);
            else
                break;
        }
        else{
            if(errno!=EINTR)
                return(-1);
            else
                n--;
        }
        *ptr=0;
        return(n);
    }
}
ssize_t
readn(int fd,void *vptr,size_t n)
{
   ssize_t nread;
   size_t nleft;
   char *ptr;
   ptr=vptr;
   nleft=n;
   while(nleft!=0){
      if((nread=read(fd,ptr,nleft))<0)
        {if(errno==EINTR)  /*may signal interrupt,so restart*/
           nread=0;        /*nothing readen*/
         else              /*error*/
           return(-1);
      }
      else if(nread==0)    /*EOF*/
         break;
      nleft=nleft-nread;
      ptr=ptr+nread;
   }
   return(n-nleft);
}
ssize_t
writen(int fd,void *vptr,size_t n)
{
   ssize_t nwrite;
   size_t  nleft;
   char *ptr;
   nleft=n;
   while(nleft!=0){
      if((nwrite==write(fd,ptr,nleft))<0)
        {if(errno==EINTR)
           nwrite=0;
         else
           return(-1);
      }
      nleft=nleft-nwrite;
      ptr+=nwrite;
   }
   return(n);
}
int
Socket(int domain,int type,int family)
{
    int sock;
    if((sock=socket(domain,type,family))<0)
        err_sys("socket error";
    return(sock);
}
void
Listen(int s,int backlog)
{
    char *ptr;
    if((ptr=getenv("LISTENQ")==NULL)
        printf("No match to LISTENQ\n";
    else
        backlog=atoi(ptr);
    if(listen(s,backlog)<0)
        err_sys("listen error";
}
void
Bind(int s,struct sockaddr *my_addr,socklen_t addrlen)
{
    if(bind(s,my_addr,addrlen)<0)
        err_sys("bind error";
}
void
Connect(int s,const struct sockaddr *serv_addr,socklen_t addrlen)
{
    if(connect(s,serv_addr,addrlen)<0)
        err_sys("connect error";
}
int
Accept(int s,struct sockaddr *addr,socklen_t *addrlen)
{
    int sock;
    if((sock=accept(s,addr,addrlen))<0)
        err_sys("accept error";
    return(sock);
}
above::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;myfuc.h
assemble   server source and client source.
first run server ,netstat -a ,then we see
tcp        0      0 *:9877                  *:*                     LISTEN
but later run client   for example:a.out  127.0.0.1
then netstat -a
we should see
tcp        0      0127.0.0.1.9877            127.0.0.1.2333          Established
tcp        0      0127.0.0.1.2333            127.0.0.1.9877          Established
but only we see
tcp        0      0 *:9877                  *:*                     LISTEN
why??????
help me,thanks
i am fresh to linux,if i can't pass this,so bad!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP