Article View: cn.bbs.comp.program
Article #532Unix��TCP/IP�����̼���
From: manager
Date: Sun, 02 Aug 1998 00:00
Date: Sun, 02 Aug 1998 00:00
211 lines
12309 bytes
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�Ŀ���������������,����˵�Ѿ���Ϊ����
��̵�ͨ�ýӿ�,�������ǿ�����Ĺ���,���ǿ��Թ�����������ϵ
ͳ��������Э��ķֲ�ʽ����ϵͳ��
--
[1;36m�� ��:��SYSOP �� Aug 2 21:49:33 �ı��ģ�[FROM: localhost][m
[m[1;31m�� ��Դ:���ڽ����� bbs.ht.net.cn��[FROM: localhost][m
Technical Details
Message-ID:
<3PiXRJ$Uve@bbs.ht.net.cn>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow 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