🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #532

Unix��TCP/IP�����̼���

#532
From: manager
Date: Sun, 02 Aug 1998 00:00
211 lines
12309 bytes
��  ��: [ת��] Unix��TCP/IP�����̼���
����վ: �ڽ����� BBS �Ų�

    ������
    Unix�Ǽ����ʹ�õ���������ϵͳ֮һ,TCP/IP�ǹ�ΪӦ�õĻ�
����Э��,UnixΪTCP/I P�������ṩ��һ��������ͨ�Ż���:��
���ֽӿ�(Sockets Interface)�����Ľ�����Un ix�������׽��ֵĻ�
�������̼���,�����ʵ��˵����Unix��������׽���ʵ�ֿͻ�
��/��������ʽ�Ľ��ͨ�š�

    һ���׽��ּ��
    �׽���(Socket)������ͨ�ŵĻ������Ԫ,���ṩ�˲�ͬ����
����˫��ͨ�ŵĶ˵�,��Щ�����ͨ��ǰ���Խ���һ��Socket,��ͨ
���Socket�Ķ�/д����ʵ������ͨ�Ź��ܡ�
    �׽��ַ�Ϊ����3�����͡�

    1.�ֽ����׽���
    ������õ��׽�������,TCP/IPЭ����е�TCP(Transport Con
trol Protocol)Э��ʹ�ô���ӿ�,���ṩ�������ӵ�(�������·)
���޲��ġ������Ⱥ�˳��һ�µġ���Ȳ��޺ͷ��ظ��������Ű�
���䡣

    2.��ݱ��׽���
    TCP/IPЭ�����е�UDP(User Datagram Protocol)Э��ʹ�ô���
�ӿ�,���������ӵķ���,�Զ������Ű�������紫��,�Ű���󳤶�
Ϊ32KB,���䲻��֤˳���ԡ��ɿ��Ժ����ظ���,��ͨ�����ڵ�������
�����ɿ��Բ���Ҫ�ij��ϡ�
    3.ԭʼ��ݱ��׽���
    �ṩ�������²�ͨѶЭ��(��IPЭ��)��ֱ�ӷ���,��һ�㲻����
������ͨ�û���,��Ҫ���ڿ����µ�Э���������ȡЭ������εĹ�
�ܡ�

    �����׽���ϵͳ����
    ������Unix���׽���ϵͳ���õļ�˵����
����

    ���׽��ֱ�̷���
    ���ォ�ֱ������������Э����ֽ����׽����������Э�����
�ݱ��׽��ֵı�̷���,��ԭʼ��ݱ��׽�����ʵ�ʹ�����ʹ�ý���,
�ڴ˲������ۡ�
    ���ۺ����׽��ֱ�̾���ÿͻ���/��������Э��ģʽ,���ɿͻ�
������������̷�������,���������ִ�б���������񲢽����
���ظ�ͻ���̡�
    �ֽ����׽��ֵķ����̺Ϳͻ������ͨ��ǰ���뽨�����ӡ���
�����Ӽ�ͨ�ŵIJ����ͼ1��

    1.���������ȵ���Socket()����һ���ֽ����׽���,������bin
d()����������ַ�����ڸ��׽�����,���ŵ���listen()������������
,������accept()������ͻ���̽������ӵ�׼��,����������ʱ,
�����̱�����;

    2.�ͻ���̵���Socket()�����ֽ����׽���,Ȼ�����connect()
������̷�����������;

    3.��������������,�����̱�����,���һ���µ��ֽ����׽�
��,�������׽���ͬ�ͻ���̵��׽��ֽ�������,��������������
���׽�����������ڼ��������ϵķ�������
    4.�����̺Ϳͻ����ͨ�����read()��write()�������; 
    5.�����̺Ϳͻ����ͨ�����close()�����׽��ֲ��ж�����
��ͼ1 ��������Э����ֽ����׽���ϵͳ����
ͼ2 ������Э��ı��׽���ϵͳ����

    ����׽��ֵķ����̿ͻ����ͨ��ǰ���ؽ�������, ͨ�ŵIJ�
���ͼ2��
    1.���������ȵ���Socket()����һ������׽���,������bind(
)����������ַ�����ڸ��׽�����,Ȼ�����recvfrom()�ȴ�ͻ����
����������; 
    2.�ͻ�����ڵ���Socket()����һ����ݱ��׽��ֺ�,����bind(
)���ͻ����ַ�����ڴ��׽�����,���ŵ���sendto()������̷���
����,Ȼ�����recvfrom()�ȴ�����̷��ظ�����Ĵ�����;

    3.��������ִ�пͻ����������������,����sendto()����
����ظ�ͻ����
    4.�����̺Ϳͻ����ͨ�����close()�����׽��֡�
    �ġ��׽��ֱ��ʾ��
    ������һ�������ֽ����׽�����TCP/IP������ʵ�ֿͻ���/��
������ʽ���ͨ�ŵ�ʵ��
    �ڴ�����,���������ڿͻ��������,��˫���������Ӻ�,����
���ͨ���������ͻ���̲��Ϸ���һ������������������,�ͻ���
��ÿ���յ�50�������������Ļ����ʾһ����.',��ʾ��20�����
��,ֱ������һ����̱��ж�Ϊֹ��
    /******server.c******/
    # include <sys/types.h>
    # include <sys/socket.h>
    # include <netinet/in.h>
    # include <netdb.h>
    # include <stdio.h>
    main()
    {
    int sock,namelen,seq,netint;
    struct sockaddr-in server;
    //���������internet��ַ
    char msgsock;
    char buf[1024];
    //����internet���TCPЭ����ֽ����׽���
    sock=socket(AF-INET,SOCK-STREAM,IPPROTO-TCP);
    if(sock<0){
    perror("socket");
    exit(1);
    }
    //����������(������)�ĵ�ַ���������׽�����
    server.sinfamily=AF-INET;
    //internet��
    sevrer.sinaddr.s-addr=INADDR-ANY;  //ʹ������Ϸ���ַ
    sevrer.sinport=htons(1032);
    //���ϵķ���˿ں�
    if(bind(sock,&server,sizeof(server))<0){
    perror("bind");
    exit(2);
    }
    //��������Ϊ5�ļ������,���׽�����������������
    if(listen(sock,5)<0){
    perror("listen");
    exit(3)
    }
    //�������ͻ���������������,����һ���׽�������ͨ��
    namelen=sizeof(server);
    if((msgsock=accept(sock,&server,&namelen))<0){
    perror("accept");
    exit(4);
    }
    //��ʱ�����ѽ���,���Խ���ͨ��
    seq=0;
    for(;;){
    netint=htonl(seq);
    //�����ֽ�˳��תΪ�����ֽ�˳��
    write(msgsock,&netint,4);
    //��ͻ���д������
    seq++;
    }
    }
    /******client.c******/
    # include  <sys/types.h>
    # include  <sys/socket.h>
    # include  <netinet/in.h>
    # include  <netdb.h>
    # include  <stdio.h>
    main(argc,argv)
    int argc;
    char *argv[];
    {
    int sock,myseq,recvseq;
    struct sockaddr-in server;//���������internet��ַ
    struct hostcnt *h;//��������Ϣ
    //�����������:��������������,������
    //������/etc/hosts�ļ��ж���,����:
    // 192.7.100.31 hp486
    if(argc!=2){
    printf("Usage:%s servername\n",argv[0];
    exit(1);
    }
    //����internet��TCPЭ����ֽ����׽���
    sock=socket(AF-INET,SOCK-STREAM,IPPROTO-TCP);
    if(sock<0){
    perror("socket");
    exit(2);
    }
    //��������в����ṩ�ķ�����������,ȡ�÷������ĵ�ַ
    if(!(h=gethostbyname(argv[1]))){
    perror(argv[1];
    exit(3);
    }
    bzero(&server,sizeof(server)); //�Ƚ���������ַ��0
    server.sinfamily=AF-INET;
    //internet��
    //��ȡ���������ַ����������ĵ�ַ
    bcopy(h->h-addr,&server.sinaddr,h->length);
    server.sinport=htons(1032);  //���빫�ϵķ���˿ں����
���̽�������
    if(connect(sock,&server,sizeof(server))<0){
    perror("connect");
    exit(4);
    }
    //��ʱ,�����ѽ���,��ͨ����׽��ֵĶ�/дʵ��ͨ��
    myseq=0;
    while(read(sock,&recvseq,4)==4){//��������
    recvseq=ntohl(recvseq);
    //�����ֽ�˳��ת��Ϊ�����ֽ�˳��
    if(myseq!=recvseq){
    printf("sented=%d wanted=%d\n",recvseq,myseq);
    myseq=recvseq;
    }
    else
    myseq++;
    if(!(recvseq%50))
    printf(".");
    if(!(recvseq%1000))
    printf("\n");
    }
    }

    �塢������
    ��ȻSockets��������ΪBSD�淶�������,���ѳ�ΪUnix����ϵ
ͳ��TCP/IP�����̱�׼,����,�������缼���IJ��Ͻ�,Sockets��
Ӧ�÷�Χ�Ѳ��پ�����Unix����ϵͳ��TCP/I P���硣Ŀǰ,Windows
��Windows NT��Windows 95��OS/2��Sun OS��Netware�����IJ���
ϵͳ����ʼ�ṩ�׽��ֽӿ�,�����ڼ���4.3BSD Unix Sockets�Ļ�
�ϸ�����һЩ��Ӧ�������ϵͳ���Ե���������,��Щ�°��Sockets
�Բ���ϵͳ���û���ҵ���ʽ�ṩ�����Ա��W insock (Windows So
ckets)����һ������Windowsϵ�в���ϵͳ��Sockets�汾��ͬʱ,��
������֧�ֵ�����Э������Ҳ��������,����,Winsock����֧��TCP/U
DPЭ��,����֧��IPX/SP X��AppleTalk��Decnet��NetBEUI������Э
��,Netware���׽���֧��TCP/UDP��IPX/SPXЭ�顣����,�׽��ֻ���
���˷�C����֧��:��C++��BASIC��Pascal�ȡ�
    �ɴ˿ɼ�,Sockets�Ŀ���������������,����˵�Ѿ���Ϊ����
��̵�ͨ�ýӿ�,�������ǿ�����Ĺ���,���ǿ��Թ�����������ϵ
ͳ��������Э��ķֲ�ʽ����ϵͳ��

--
�� �޸�:��SYSOP �� Aug  2 21:49:33 �޸ı��ģ�[FROM: localhost]
�� ��Դ:���ڽ����� bbs.ht.net.cn��[FROM: localhost]
Technical Details
Message-ID: <3PiXRJ$Uve@bbs.ht.net.cn>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: fc86e,94a210b5edc5401a,start
X-Google-Attributes: gidfc86e,public
From: SYSOP.bbs@bbs.ht.net.cn (manager)
Subject: Unix��TCP/IP�����̼���
Date: 1998/08/02
Message-ID: <3PiXRJ$Uve@bbs.ht.net.cn>
X-Deja-AN: 377198361
Content-Transfer-Encoding: 7bit.
X-Filename: program/M.902065699.A
Content-Type: text/plain; charset=US-ASCII.
X-Complaints-To: abuse@clinux.ml.org
X-Trace: clinux.ml.org 902065818 834 202.103.160.51 (2 Aug 1998 13:50:18 GMT)
Organization: �ڽ�����
Mime-Version: 1.0
NNTP-Posting-Date: 2 Aug 1998 13:50:18 GMT
Newsgroups: cn.bbs.comp.program