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