🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: cn.bbs.comp.program
1 messages
1 total messages Started by manager Sun, 02 Aug 1998 00:00
Unix��TCP/IP�����̼���
#532
Author: 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]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads