Article View: cn.bbs.comp.lang.java
Article #22083Java���˼��---��15�� ������
From: �˺�2��
Date: Tue, 28 Oct 2003 01:49
Date: Tue, 28 Oct 2003 01:49
466 lines
62705 bytes
62705 bytes
��ʷ�ϵ������̶����������ѡ����ӣ����Ҽ��׳��?
����Ա���������������йصĴ���ϸ�ڣ���ʱ����Ҫ��Ӳ������̵���ʶ��һ��أ���
����Ҫ�������Э���в�ͬ�ġ��㡱��Layer�������Ҷ���ÿ������⣬һ�㶼������
���ڶ�ĺ���ֱ��漰��Ϣ������ӡ����Ͳ����Щ����������䣻�Լ����ֵ�
�ȡ�����һ������ʹ��Ĺ�����
���ǣ�������ĸ�����Ǻ��ѡ���������λ������ط�ij̨�����ϵ���Ϣ������
�����Ƶ��������෴�������д�ļ��dz����ƣ�ֻ���ļ�������Զ�̻����ϣ�����
Զ�̻�����Ȩ������δ�������������߷��͵���ݡ�
Java���ɫ��һ���ط�������ġ���ʹ���������й�����Ļ��ϸ���ѱ�������
����ȡ��ȥ����������JVM�Լ�Java�ı���װϵͳ����п��ơ�����ʹ�õı��ģ����
һ���ļ���ģ�ͣ���ʵ�ϣ��������ӣ�һ�������֡����ѱ���װ��ϵͳ���������
���������������������ͬ��ķ������á�������⣬�����Ǵ�����һ���������⡪
��ͬʱ���ƶ���������ӡ�����ʱ��Java�ڽ��Ķ��̻߳���Ҳ��ʮ�ַ���ġ�
���½���һϵ���������ӽ���Java������֧�֡�
15.1 �����ı�ʶ
��Ȼ��Ϊ�˷ֱ����Ա�һ̨�������Լ�Ϊ�˱�֤�Լ����ӵ���ϣ�����̨��������
����һ�ֻ����ܶ�һ���ر�ʶ�������ڵ�ÿ̨��������������ֻ���������ڱ�����
�绷����Ϊ�����ṩΨһ�����֡���Java������������������Ҫ����һ�ֻ��ƶ���
��������صĻ������б�ʶ��Ϊ�ﵽ���Ŀ�ģ����Dz�����IP ���������ַ���ĸ��
IP��������ʽ�����ţ�
(1) �������Ϥ��DNS�����������ʽ�����Լ���������bruceeckel.com�����Լٶ���
���Լ���������һ̨��ΪOpus�ļ�����������Ϳ�����Opus.bruceeckel.com������
�Ǵ���������˷��͵��Ӻ���ʱ���õ����֣�����ͨ�����ɵ�һ����ά��WWW����ַ��
��
(2) ���⣬��ɲ��á��ĵ㡱��ʽ���༴�ɵ�ţ�.���ָ����������֣�����202.98.32
.111��
�������������IP��ַ���ڲ�������һ����32��������λ��bit�����ɵ����֣�ע�͢�
��������IP��ַ��ÿһ�����ֶ����ܳ���255��������java.net�ṩ��static InetAddr
ess.getByName()�����ǿ�����һ���ض���Java�����������κ�һ����ʽ�����֡����
������ΪInetAddress��һ�����������һ�������֡���Socket��������ں���
�����һ�㡣
�٣�����ζ�����ֻ�ܵõ�40�����ҵ�������ϣ�ȫ������˺ܿ�ͻ�����ù⡣����
��Ŀǰ�����о�����IP��ַ�����������128 bit�����֣�����õ���Ψһ��IP��ַҲ
���ڼ������ʱ���ﶼ�������ꡣ
��Ϊ����InetAddress.getByName()һ�������ӣ��뿼�Ǽ����Լ���һ�Ҳ���������
��������ṩ�ߣ�ISP������ô�ᷢ��ʲô�����ÿ�β������ӵ�ʱ�������õ�һ
����ʱIP��ַ�����������ڼ䣬�Ǹ�IP��ַӵ����������������IP��ַһ�����Ч�ԡ�
������˰������IP��ַ������Ļ��������Ǿ��п���ʹ��������������е�Web����F
TP����������Ȼ���и�ǰ�ᣬ�Է�����ȷ��֪����Ŀǰ���䵽��IP������ÿ�β�
�����ӻ�õ�IP�������ģ��������ȷ���������IP�أ�
���������������InetAddress.getByName()���������IP��ַ��Ϊ������������������
�ȱ���֪�����������֡��ó���ֻ��Windows 95�н����˲��ԣ�����ҿ������ν���
�Լ��ġ���ʼ���������á�����������塱�������硱��Ȼ����롰��ʶ����Ƭ������
�����������ơ�����Ӧ����������������ݡ�
827ҳ����
�����Լ��������˵�����������ֽ�����Colossus��������ͬ���Ӱ�������ˡ�����˼
��������̨��������һ���ܴ��Ӳ�̣�������һ����ͨ�ҵ�ISP��������������ִ�г���
��
java whoAmI Colossus
�õ��Ľ��������������ӣ���Ȼ�������ַ����ÿ�ζ��Dz�ͬ�ģ���
Colossus/202.98.41.151
�����Ұ������ַ����һλ���ѣ���Ϳ���������¼���ҵĸ���Web��������ֻ��ָ��Ŀ
���ַhttp://202.98.41.151���ɣ���Ȼ���Ҵ�ʱ���ܶ��ߣ�����Щʱ������������
�˷�����Ϣ�������Լ���Webվ����ʽ��̨��ǰ���в��Ե�һ�ַ����ֶΡ�
15.1.1 �������Ϳͻ���
�������ľ����������̨�������ӵ�һ�𣬲������̸�����ߡ���ͨ����һ����
̨�����������˶Է����Ϳ���չ��һ����������˫��Ի���������������ܡ����֡�
�Է��أ������������������һ̨�������ò�ͣ����һ���ط��������������˵��
���٣����������أ���
��ͣ����һ���ط����Ļ�������������������Server�������������ˡ��Ļ����������
�ͻ���Client�����ߡ��ͻ���������֮������ֻ���ڿͻ�����ͼͬ���������ӵ�
ʱ����Ե÷dz����ԡ�һ����ͨ���ͱ����һ��˫��ͨ�ţ�˭�����ݷ��������߿ͻ���
���Եò���ô��Ҫ�ˡ�
���Է���������Ҫ���������������ӵ��������������Ǵ������ض��������������
�ġ���ͻ����������������һ̨�������������ӣ����������Ǵ������ض��ͻ������
��ɵġ�һ�����ӽ��ã���ô�����ڷ������˻��ǿͻ���ˣ�����ֻ��ħ����ر����
һ��IO�����������ʱ��ʼ�����ǿ������дһ����ͨ���ļ�����Դ����ӡ�����
һ���������ӣ�����ֻ�����10������ʹ���Լ���Ϥ��IO����ɡ�������Java������
�����һ���ط���
1. ��û�������ǰ���²��Գ���
���ڶ���DZ�ڵ�ԭ�����ǿ���û��һ̨�ͻ���������Լ�һ�������������Լ�����
�ij�������Ҳ������һ�����û����н�����ϰ������д������һ����ʮ�ֿɿ�������
Ӧ�ã������õ�������ȥ��IP�������ע���������⣬��������һ������ĵ�ַ��
��localhost��������������绷���еIJ���Ҫ���� Java�в��������ַ��һ�����
���ǣ�
InetAddress addr = InetAddress.getByName(null);
�����getByName()����һ��null���գ�ֵ����Ĭ��Ϊʹ��localhost��������InetAddr
ess���ض��Ļ�������������ұ����ڽ��н�һ���IJ���֮ǰ�õ����InetAddress��
�������ַ�������Dz����Բ���һ��InetAddress�����ݣ����ɰ����ӡ������������һ
������Ҫ��ʾ����������InetAddress��Ψһ;�������Ǹ����static����̬����Ա
����getByName()��������õģ��� getAllByName()����getLocalHost()��
Ϊ�õ����������ַ���������ֱ�Ӵ����ִ�"localhost"��
InetAddress.getByName("localhost");
����ʹ����ı���IP��ַ���ĵ���ʽ����������������
InetAddress.getByName("127.0.0.1");
�����ַ����õ��Ľ����һ��ġ�
15.1.2 �˿ڣ������ڶ�һ���ij���
��Щʱ��һ��IP��ַ�������������ʶһ��������������������һ̨�����ԵĻ�����
�����������Ŷ����������������IP����ÿ̨����Ҳ���ˡ��˿ڡ���Port����
��������һ���ͻ�����߷�������ʱ����ѡ��һ�����ۿͻ����Ƿ��������Ͽ���
�ӵĶ˿ڡ���������ȥ�ݻ�ij��ʱ��IP��ַ�����ס�ķ��ӣ���˿������ڵ��Ǹ�����
��
ע��˿ڲ����ǻ�����һ�������ϴ��ڵij������һ�����������Ҫ��Ϊ�˱�����
���㣩���ͻ�����֪�����ͨ�������IP��ַͬ�����ӣ����������ͬ�Լ�������Ҫ��
���ַ��������أ�һ��ÿ���˿ڶ�������һ�ַ���һ̨���������ṩ�˶��ַ���
��HTTP��FTP�ȵȣ����˿ڱ���������������Ҫ�Ľ�ɫ�����DZ����һ�ֶ�����ַ��ʩ
��Ҳ����˵����������һ���ض��Ķ˿ڣ����൱���������Ǹ��˿ڱ�Ź����ķ���
��ʱ�����Ƿ����һ���������ӡ�ͨ����ÿ������ͬһ̨�ض������������ϵ�һ����
һ���Ķ˿ڱ�Ź�����һ�𡣿ͻ������������֪���Լ�Ҫ��������������ж˿�
�š�
ϵͳ��������ʹ�ö˿�1���˿�1024��Ȩ�������Բ�Ӧ���Լ���Ƶķ���ռ����Щ�Լ�
�����κ���֪����ʹ�õĶ˿ڡ�����ĵ�һ�����ӽ�ʹ�ö˿�8080��Ϊ���ҵĵ�һ̨
����ʹ�õ���ʽ8λIntel 8080оƬ������һ��ʹ��CP/M����ϵͳ�Ļ��ӣ���
15.2 ����
�����֡����ߡ�����Socket��Ҳ��һ�������ʽ�ij������ڱ����̨������һ
�����ӵġ��նˡ������һ���ض������ӣ�ÿ̨�����϶���һ�������֡�����������
����֮����һ������ġ����¡������µ�ÿһ�˶�����һ�������֡����ߡ�������
����Ȼ������֮���������Ӳ���Լ��������Ӷ�����ȫδ֪�ġ�����Ļ���ּ������
�Ǿ����ܲ���֪����Щϸ�ڡ�
��Java�У����Ǵ���һ�����֣���������������������ӡ������ֵõ��Ľ����
һ��InputStream�Լ�OutputStream����ʹ��ǡ����ת��������ֱ���Reader��Writer��
���Ա㽫������Ϊһ��IO������Դ�����������������������ࣺServerSocket��
���������������������ӣ��Լ�Socket���ͻ������ʼһ�����ӡ�һ���ͻ�����
�����뽨��һ���������ӣ�ServerSocket�ͻ᷵�أ�ͨ�� accept()������һ����Ӧ
�ķ����������֣��Ա����ֱ��ͨ�š��Ӵ�ʱ�����Ǿ͵õ�������ġ����֣���
���֡����ӣ�������ͬ��ķ�ʽ�Դ����ӵ����ˣ���Ϊ���DZ���������ͬ�ģ���ʱ����
����getInputStream()�Լ�getOutputStream()��ÿ�����ֲ����Ӧ�� InputStream��
OutputStream������Щ����������װ���������ڡ��ɰ���10�½��ܵķ����������
��ʽ��������Դ������κ�����������
����Java���������ƣ�ServerSocket�����������֣���ʹ�����������ײ�������
��һ����֤����ҿ�����ΪServerSocket��ý�����ServerConnector����������������
������������ʲô���֣�ֻ�Dz�Ҫ�����а���һ����Socket����Ҳ������Ϊ ServerSoc
ket��Socket��Ӧ��һЩͨ�õĻ���̳С���ʵ�ϣ���������ȷʵ���˼���ͨ�õķ�
�������������ʸ�����Ǹ���һ��ͨ�õĻ��ࡣ�෴��ServerSocket����Ҫ��������
�������ĵصȺ��������ͬ�����ӣ��ٷ���һ��ʵ�ʵ�Socket�������ǡ�ServerSocket
�� �������ǡ���ĵط�����Ϊ���Ŀ�겻����ij�Ϊһ��Socket��������������ͬ��
���ӵ�ʱ�����һ��Socket����
Ȼ��ServerSocketȷʵ���������ϴ���һ�������Եġ������������������õ�����
��������ֻ������������ӣ�Ȼ������accept()��������һ�����ѽ��������֣�
���غ�Զ�̶˵���Ѷ��壩��������ĵط������������֣�������ѽ�����������
ͬ�ķ��������ֹ�����һ����������ֻ�ܽ����µ����������ܽ���ʵ�ʵ���
�ݰ����Ծ���ServerSocket���ڱ�̲���̫������壬����ȷʵ�ǡ������ԡ��ġ�
����һ��ServerSocketʱ��ֻ��Ϊ�丳��һ���˿ڱ�š����ذ�һ��IP��ַ��������
Ϊ���Ѿ����Լ�������̨�������ˡ����ڴ���һ�� Socketʱ��ȴ����ͬʱ����IP��ַ
�Լ�Ҫ���ӵĶ˿ڱ�ţ���һ���棬��ServerSocket.accept()���ص�Socket�Ѿ�����
������Щ��Ϣ����
15.2.1 һ���ķ������Ϳͻ������
������ӽ�����ķ�ʽ�������ֶԷ������Ϳͻ�����в�������������ȫ������
���ǵȺ���һ�����ӣ�Ȼ�����Ǹ����Ӳ����Socket����һ�� InputStream�Լ�һ��
OutputStream������֮�����InputStream��������ж������ᷴ����OutputStream��
ֱ�����յ�����ֹ��END��Ϊֹ�����ر����ӡ�
�ͻ�������������������ӣ�Ȼ��һ��OutputStream���ı���ͨ��OutputStream��
�͡��ͻ���Ҳ�ᴴ��һ��InputStream���������������˵Щʲô������ֻ�����Ƿ�����
����ͬ����־䣩��
��������ͻ������ʹ��ͬ��Ķ˿ںţ����ҿͻ������ñ��������ַ����λ��
ͬһ̨�����еķ��������������Բ�����һ�������Ե���������ɲ��ԣ���ijЩ��
�û����У�������Ҫͬ��������罨�����ӣ���������ܹ�����������ʵ�ʲ���ͨ��
�Ǹ�����ͨ�ţ���
�����Ƿ���������
831-832ҳ����
���Կ�����ServerSocket��Ҫ��ֻ��һ���˿ڱ�ţ�����ҪIP��ַ����Ϊ�������̨��
�������У�������accept()ʱ����������ʱ����ͣ��״̬������ֱ��ij���ͻ�����
ͬ�������ӡ�����֮��������������Ⱥ����ӣ������������������У��ο���14
�£�������һ�������Ժ�accept ()�ͻ᷵��һ��Socket���������Ǹ����ӵĴ�?
������ֵ�����������õ��˺������Ĵ��?����ServerSocket������ʧ�ܣ������
���˳���ע����뱣֤ServerSocket�Ĺ�������ʧ��֮�������κδ�����
���֣���������������main()�ᡰ������һ��IOExceptionΥ�����Բ���ʹ��һ��
try�顣�� ServerSocket�������ɹ�ִ�У����������з������ö����뵽һ��try-fina
lly�������Ѱ������ȷ�����ۿ���ʲô��ʽ���£� ServerSocket������ȷ�عر�
��
ͬ��ĵ���Ҳ��������accept()���ص�Socket����accept()ʧ�ܣ���ô���DZ��뱣֤So
cket���ٴ��ڻ��ߺ����κ���Դ���Ա㲻��������ǡ�������ִ�гɹ������������
�������һ��try-finally���ڣ��Ա���������ʧ�ܵ�����£�Socket���ܵõ���ȷ����
����������ʹ������Ҫ�ķ��ڴ���Դ����������������ر�����������Լ����ֽ�
�������Java��û���ṩ���ƻ�����������������������飩��
����ServerSocket������accept()�����Socket����ӡ��System.out�����ζ������
��toString������õ��Զ����á����������ˣ�
833ҳ�г���
��Ҳ��þͻῴ�����������ͻ���������������ϡ�
�������һ���ֿ����ƺ������Ǵ��ļ����Ա��ȡ��д�룬ֻ��InputStream��Outpu
tStream�Ǵ�Socket�����ġ��������� ��ת��������InputStreamReader��OutputS
treamWriter��InputStream��OutputStream�����Ѿ��ֱ�ת����ΪJava 1.1��Reader��
Writer����Ҳ����ֱ��ʹ��Java1.0��InputStream��OutputStream�࣬���������˵
��ʹ�� Writer��ʽ�������Ե����ơ���һ������ͨ��PrintWriter���ֳ����ģ�����һ
�����صĹ��������ܻ�ȡ�ڶ�������һ������ֵ��־��ָ���Ƿ���ÿһ��println(
)�����ʱ���Զ�ˢ�����������������print()��䣩��ÿ��д����������ݺ�д��
out������Ļ��������ˢ�£�ʹ��Ϣ����ʽͨ�����紫�ݳ�ȥ����Ŀǰ���������˵��
ˢ���Ե���Ϊ��Ҫ����Ϊ�ͻ��ͷ������ڲ�ȡ��һ������֮ǰ��Ҫ�ȴ�һ���ı����ݵ�
�����ˢ��û�з�����ô��Ϣ����������磬��ǻ�����������������Ϊ����
����������⡣
��д����Ӧ�ó���ʱ����Ҫ�ر�ע���Զ�ˢ�»��Ƶ�ʹ�á�ÿ��ˢ�»�����ʱ�����봴
���ͷ���һ����ݰ���ݷ⣩����Ŀǰ�������˵��������������ϣ��ģ���Ϊ����
���ڰ��˻�û�з������ı��У��������Ϳͻ���֮���������֡��ͻ�ֹͣ������
��˵��һ�е�ĩβ����һ����Ϣ��ĩβ�����������������£���Ϣ���������зָ���
�����Բ��粻���Զ�ˢ�»��ƣ������ڽ��Ļ������о�������������ʱ����һ����ݰ�
������һ�������ǿ��Է����ϴ����ݰ���Ҵ�����Ҳ�ܼӿ졣
ע������Ǵļ������������һ�����Ƕ�Ҫ���л��崦�?����ĩβ��һ����ϰ
�����չ���˼������Dz�����������л��壬��ô��õ�ʲô��ĺ���ٶȻ����
��
����whileѭ����BufferedReader in�ڶ�ȡ�ı��У�������Ϣд��System.out��Ȼ��д
��PrintWriter.out��ע����������κ������������ֻ���ڱ�����ͬ�������ӡ�
�ͻ���������"END"���к������ֹѭ�������ر�Socket��
�����ǿͻ������Դ�룺
834-835ҳ����
��main()�У���ҿɿ�����ñ�������IP��ַ��InetAddress������;����ʹ��null��ʹ
��localhost������ֱ��ʹ�ñ�����ַ 127.0.0.1����Ȼ�������ͨ������ͬһ̨Զ����
�����ӣ�Ҳ���Ի�����̨������IP��ַ����ӡ��InetAddress addr��ͨ���toString
()�������Զ����ã���������£�
localhost/127.0.0.1
ͨ����getByName()����һ��null�����Ĭ��Ѱ��localhost�����������ı�����ַ12
7.0.0.1��ע������Ϊsocket�����ִ���ʱ��ͬʱʹ����InetAddress�Լ��˿ںš���
ӡ�����ij��Socket����ʱ��Ϊ�����������ĺ��壬���סһ�ζ�һ������������
����������������ݱ�ʶ�ģ�clientHost���ͻ�����clientPortNumber���ͻ��˿�
�ţ���serverHost�����������Լ� serverPortNumber������˿ںţ��������������
���ڱ�������127.0.0.1���Ͻ���Ϊ�����Ķ˿ڣ�8080����һ���ͻ�������
��������һ�����õĶ˿ھͻ������������������1077������һ�ж�Ҳ�����
�������ͬ�Ļ�����127.0.0.1���Ͻ��С����ڣ�Ϊ��ʹ������ڿͻ����������֮����
�ش��ͣ�ÿһ�˶���Ҫ֪������ݷ������������ͬһ������֪������������ӵ�ʱ
�ͻ��ᷢ��һ�������ص�ַ����ʹ����������֪�����Լ�����ݷ����Ķ�������
�������˵�ʾ������п�����ᵽ��һ�����
Socket[addr=127.0.0.1,port=1077,localport=8080]
����ζ�ŷ������ղ��ѽ���������127.0.0.1��̨�����Ķ˿�1077�����ӣ�ͬʱ�����Լ�
�ı��ض˿ڣ�8080�������ڿͻ��ˣ�
Socket[addr=localhost/127.0.0.1,PORT=8080,localport=1077]
����ζ�ſͻ������Լ��ı��ض˿�1077��127.0.0.1�����ϵĶ˿�8080������ ���ӡ�
��һ�ע�ÿ�����������ͻ������ʱ���ض˿ڵı�Ŷ������ӡ������Ŵ�10
25���պ���ϵͳ������1-1024֮�⣩��ʼ������һֱ������ȥ���������������������
���������������˿ں���Ȼ���1025��ʼ��ֵ����Unix�����У�һ�����������װ���
��Χ�����־ͻ��ٴδ���С�Ŀ������ֿ�ʼ����
������Socket�������ת����BufferedReader��PrintWriter�Ĺ�̱����ڷ�������
��ͬ��ͬ��أ���������¶�Ҫ��һ�� Socket��ʼ����������ͻ�ͨ����ִ�"ho
wdy"�����ں������һ�����֣��Ӷ��ʼ��ͨ�š�ע���������ٴ�ˢ�£������Զ�
����ģ�ͨ��ݸ�PrintWriter�������ĵڶ���������������û��ˢ�£���ô���
�Ự��ͨ�ţ����ᱻ������Ϊ���ڳ�ʼ���ġ�howdy����Զ���ᷢ�ͳ�ȥ��������
��������ɷ��Ͷ������Զ����У����ӷ��������ص�ÿһ�ж���д��System.out��
����֤һ�ж�������ת��Ϊ��ֹ�Ự����Ҫ����һ��"END"�����ͻ�����ع���
��ô�������ᡰ������һ��Υ��
�����������Կ������Dz�����ͬ��Ĵ�ʩ��ȷ����Socket����������Դ�õ���ȷ��
���������һ��try-finally��ʵ�ֵġ�
���ֽ�����һ����ר�á����ӣ����һֱ������ȷ�Ͽ�����Ϊֹ��ר������Ҳ����
����ԵضϿ���ǰ����ijһ�˻����м��ij����·���ֹ��϶������������ζ�Ų�����
�ӵ�˫����������ͨ���У����������Ƿ�����ݴ��ݣ����Ӷ��������ڿ���״̬��
�ӱ��濴�����ƺ���һ�ֺ��������ʽ��Ȼ����ҲΪ��������˶���Ŀ�����
�������ܽ����������һ�ַ�ʽ���������ַ�ʽ�����ӵĽ���ֻ����ʱ�ġ�
15.3 �������ͻ�
JabberServer������������ÿ��ֻ��Ϊһ���ͻ������ṩ�����ڵ��͵ķ�������
������ϣ��ͬʱ�ܴ������ͻ���������������Ĺؼ���Ƕ��̴߳�����ơ���
������Щ���?֧�ֶ��̵߳����ԣ��ﵽ���Ҫ���������쳣���ѵġ�ͨ���14�µ�ѧ
ϰ������Ѿ�֪��Java�ѶԶ��̵߳Ĵ�������˾����ܵļ�����Java���̴߳��?
ʽ�dz�ֱ�ӣ������÷��������ƶ���ͻ������Ǽ����¡�
���ķ������ڷ������������ﴴ������ServerSocket��������accept()���Ⱥ�һ
�������ӡ�һ��accept()���أ����Ǿ�ȡ�ý���õ�Socket���������½�һ���̣߳�
����ֻΪ�Ǹ��ض��Ŀͻ�����Ȼ���ٵ���accept()���Ⱥ���һ���µ���������
����������η��������룬��ҿɷ�������JabberServer.java���ӷdz����ƣ�ֻ��Ϊһ
���ض��Ŀͻ��ṩ��������в�����������һ���������߳����У�
837-839ҳ����
ÿ�����¿ͻ�������һ������ʱ��ServeOneJabber�̶߳���ȡ����accept()��main()
����ɵ�Socket����Ȼ�����һ����һ��BufferedReader������Socket�Զ�
ˢ��PrintWriter������������Thread�����ⷽ��start ()����������̵߳ij�ʼ
����Ȼ�����run()�������ȡ�IJ�����ǰ����һ��ģ�����ɨ�ֶ���ijЩ������Ȼ���
��ԭ������ȥ��ֱ������һ������� "END"�����־Ϊֹ��
ͬ��أ����ֵ���������н�������ơ���Ŀǰ���������˵����������ServeO
neJabber�ⲿ�����ģ�������������ԡ����?���� ServeOneJabber������ʧ�ܣ���
ôֻ��������ߡ�������һ��Υ��ɣ�Ȼ���ɵ����߸����̵߳������繹����
�ɹ�����ô������ ServeOneJabber�������̵߳�������������run()����еġ�
��ע��MultiJabberServer�ж�ô������ǰһ�����Ǵ���һ��ServerSocket������
��accept()����һ�������ӵĽ���������һ�Σ�accept()�ķ���ֵ��һ�����֣�����
�ݸ�����ServeOneJabber�Ĺ�����������һ�����̣߳������Ǹ����ӽ��п��ơ���
���жϺ��̱߳�ɼ���ʧ��
���ServerSocket����ʧ�ܣ�����һ��ͨ��main()����Υ�����ɹ�����λ������
try-finally�������Ե�����ȷ�����λ���ڲ��try-catch��ֻ�������ServeOne
Jabber��������ʧ�ܣ����������ɹ�����ServeOneJabber�̻߳Ὣ��Ӧ�����ֹص���
Ϊ��֤ʵ����������ȷʵ��Ϊ����ͻ��ṩ��������������������ͻ���ʹ��
�̣߳�����ͬ��ͬ�ķ������������ӡ�ÿ���̵߳ġ�����ʱ�䡱�������ġ�һ������
���������ռ��Ա㴴��һ�����̡߳����?�����̵߳������������final int maxthr
eads�����ġ���һ�ע����ֵ�dz��ؼ���Ϊ���������úܴ��̱߳��п��ܺ�
����Դ���������Ԥ֪�ij������
840-842ҳ����
JabberClientThread��������ȡһ��InetAddress���������һ�����֡���ҿ�����
�����������һ����·��Socket�϶����ڴ���ij��Reader�Լ�������Writer������Inpu
tStream�ͣ���OutputStream��������������Socket��Ψһ��ʽ����Ȼ�����ǿɿ��DZ�
дһ�������࣬�����Զ������Щ��������������ظ��Ĵ����д��������ͬ��أ�st
art()ִ���̵߳ij�ʼ����������run()���������Ϣ����������������Է�������
��Ϣ������Ļ�ϻ��Գ�����Ȼ���̵߳ġ�����ʱ�䡱�����ģ����ն������ע��
�����ִ������Ժ��ڹ��������֮ǰ������������ʧ�ܣ����ֻᱻ������
��Ϊ���ֵ���close()�����α��䵽��run()������ͷ�ϡ�
threadcount���ټ���Ŀǰ���ڵ�JabberClientThread���������������Ϊ��������һ
������ֵ������run()�˳�ʱ��ֵ��run()�˳���ζ���߳���ֹ������MultiJabberClien
t.main()�У���ҿ��Կ����̵߳�������õ���顣������̫�࣬��������ʱ������
�����������롰���ߡ�״̬������һ����һ�������߳������ֹ����������Щ�߳�
�Ϳ��Դ����ˡ���ҿ�����һ��������MAX_THREADS������������ʹ�õ�ϵͳ��˵����
�������̣߳����ӣ��Ż�ʹ���ϵͳ��Դ���͵�Σ�ճ̶ȡ�
15.4 ��ݱ�
������������ʹ�õĶ��ǡ��������Э�顱��TCP������������������������
�֡�����ݸ�Э��������ּ������и߶ȵĿɿ��ԣ������ܱ�֤���˳��ִ�Ŀ�ĵ�
������֮���������ش���Щ���ڸ���ԭ���·����ʧ������ݡ������յ��ֽڵ�˳����
���Ƿ�����ʱ��һ��ġ���Ȼ�����ֿ�����ɿ�����Ҫ���Ǹ���һЩ��ۣ�TCP���зdz�
�ߵĿ���
������һ��Э�飬��Ϊ���û���ݱ�Э�顱��UDP�������������ݰ����ȫ����
��ȥ��Ҳ���ܵ������ǵִ��˳�������Ƿ���ʱһ��������Ϊ����һ�� �����ɿ�Э��
����TCP��Ȼ�ǡ��ɿ�Э�顱�����������ƺ����㣬����������ٶȿ�ö࣬���Ծ�����
��������֮�صġ���ijЩӦ����˵�����������źŵĴ��䣬���������ݰ��ڰ�·�϶�
ʧ�ˣ���ô�ò���̫���⣬��Ϊ������ٶ��Եø���ҪһЩ�������������Ϸ����Di
ablo�����õ�Ҳ��UDPЭ��ͨ�ţ���Ϊ����ͨ�ŵĿ�������Ϸ�Ƿ������ľ��������ء�Ҳ
��������һ̨��ʱ�����������ij����Ϣ��ʧ�ˣ���ôҲ��IJ��ع�ݽ��š����⣬��
ЩӦ��Ҳ���������������һ��UDP��Ϣ���Ա��Ժ��ܹ��ָ���������ʵ���ʱ����û��
��Ӧ����Ϣ�ͻᶪʧ��
Java����ݱ���֧�������TCP���ֵ�֧�ִ�����ͬ����Ҳ����һ�����Ե���𡣶���
�ݱ���˵�������ڿͻ��ͷ����������Է���һ�� DatagramSocket����ݱ����֣�
������ServerSocket��ͬ��ǰ�߲���ɰͰ͵صȴ���һ�����ӵ������������ڲ���
���ڡ����ӡ���ȡ���֮����һ����ݱ����г�������һ��ʵ������Ƕ�TCP����
��˵��һ�����ǽ��������ӣ��㲻����Ҫ����˭��˭��˵��������ֻ��ͨ��Ự������
������ݼ��ɡ�������ݱ���˵�������ݰ����֪���Լ����Ժδ����Լ�����ȥ����
������ζ�����DZ���֪��ÿ����ݱ������Щ��Ϣ��������Ϣ�Ͳ�����ش��ݡ�
DatagramSocket�����շ���ݰ��DatagramPacket���˾������Ϣ��������һ��
��ݱ�ʱ��ֻ���ṩһ���������Ա㰲�ý��յ�����ݡ���ݰ�ִ�ʱ��ͨ��Datagr
amSocket����Ϊ��Ϣ��Դ�ص��������ַ�Լ��˿ڱ�Ż��Զ��õ�����������һ������
������ݱ��� DatagramPacket�������ǣ�
DatagramPacket(buf, buf.length)
���У�buf��һ���ֽ����顣��Ȼbuf�Ǹ����飬��ҿ��ܻ����Ϊʲô�������Լ�����
���������ij����أ�ʵ������Ҳ��ͬ�У�Ψһ�ܲµ���ԭ�����C���ı��ʹȻ����
������鲻���Լ������������ж��
�����ظ�ʹ����ݱ��Ľ��մ��룬����ÿ�ζ���һ���µġ�ÿ�������ʱ������
�������ڵ���ݶ��ᱻ���ǡ�
�����������������������������ݱ����С���������λ�ڱ�64KB��С�ĵط�����
�����Ӧ�ó����У����Ƕ���Ը���û�ҪСһЩ���ر����ڷ�����ݵ�ʱ����ѡ
�����ݰ��Сȡ����Ӧ�ó�����ض�Ҫ��
����һ����ݱ�ʱ��DatagramPacket������Ҫ����ʽ����ݣ�ҲҪ���������ַ��
���˿ںţ��Ծ������Ŀ�ĵء������������DatagramPacket�Ĺ������ǣ�
DatagramPacket(buf, length, inetAddress, port)
��һ�Σ�buf��һ���ֽ����飩�Ѿ����������뷢������ݡ�length������buf�ij���
����Ҳ���Ը��һЩ����ζ������ֻ�뷢����ô����ֽڡ�����������ֱ�����ݰ�
Ҫ������������ַ�Լ�Ŀ�������һ��Ŀ��˿ڣ�ע�͢ڣ���
�ڣ�������ΪTCP��UDP�˿���������ġ�Ҳ����˵�������ڶ˿�8080ͬʱ����һ��TC
P��UDP�����������֮�䲻������ͻ��
���Ҳ����Ϊ����������������������ͬ�Ķ���һ�����ڽ�����ݱ�����һ�����ڷ�
�����ǡ�����Ǻõ�����������Ʒ������Ὠ������Ǵ�����������ͬ���࣬����
���в�ͬ����Ϊ��һ���ࣨ������Ϊȡ����������ι���������Ҳ����Ϊһ����
�ص����⣬�����˵��ǣ�DatagramPacket��ʹ���൱�����Dz���Ҫ����������Ͼ�
���塣��һ���������ォ�к���ȷ��˵��������������ǰ�����TCP���ֵ�MultiJa
bberServer�� MultiJabberClient���ӡ�����ͻ����Ὣ��ݱ���������������Ὣ
�䷴�������������Ϣ��ͬ��Ŀͻ���
Ϊ��һ��String�ﴴ��DatagramPacket�Ĺ��������ߴ�DatagramPacket�ﴴ��Stri
ng����������������õ���һ�������࣬��ΪDgram��
844-845ҳ����
Dgram�ĵ�һ����������һ��String��һ��InetAddress�Լ�һ���˿ں���Ϊ�Լ��IJ���
����String�����ݸ��Ƶ�һ���ֽڻ������ٽ�������ݽ���DatagramPacket������
���Ӷ�һ��DatagramPacket��ע��������ʱ��"+1"������Է�ֹ��β�����Ƿ�
����Ҫ�ġ�String��getByte()��������һ������������ܽ�һ���ִ����char���ƽ�
��һ���ֽڻ��塣�÷��������ѱ������ԡ�ʹ�ã� Java 1.1��һ������á��İ취����
�����������������ȴ������ע�����ε��ˣ���Ϊ���ص�String�IJ������ݡ����Ծ�
��������Java 1.1�±���ó���ʱ��õ�һ�������ԡ���Ϣ���������Ϊ��Ȼ����ȷ��
��ģ��������Ӧ��������������ʱ�������ˣ���
Dgram.toString()����ͬʱչʾ��Java 1.0�ķ�����Java 1.1�ķ����������Dz�ͬ�ģ�
��Ϊ��һ�������͵�String����������
������������ݱ���ʾ�ķ��������룺
845-846ҳ����
ChatterServer������һ������������Ϣ��DatagramSocket����ݱ����֣���������
����ÿ��������һ������Ϣʱ���½�һ���������һ��DatagramSocket�����ظ�ʹ��
������һ���˿ںţ���Ϊ�����ڷ��������ͻ�����ȷ��֪���Լ�����ݱ������ĸ���ַ
��������һ���˿ںţ���û��Ϊ������������ַ����Ϊ���פ���ڡ��⡱̨�����ڣ�
����֪���Լ����������ַ��ʲô��Ŀǰ��Ĭ�ϵ�localhost����������whileѭ���У�
���ֱ���֪������ݣ�receive()����Ȼ����ʱ����ֱ��һ����ݱ����֣��ٰ���
��������ϣ��Ľ����ˡ���DatagramPacket dp�������档��ݰ�Packet���ᱻת����
һ���ִ���ͬʱ����Ļ�����ݰ����Դ�������ַ�����֡���Щ��Ϣ����ʾ������
Ȼ�����һ��������ִ���ָ���Լ��Ѵӷ��������������ˡ�
��ҿ��ܻ�����е���Ի������һῴ����������ͬ���������ַ�Ͷ˿ں�
����������Ϣ����Դ�ء�������֮���ͻ��������פ�����κ�һ̨���������һ����
ʾ��˵�����Ƕ�פ����localhost���ÿ���ͻ�ʹ�õĶ˿ڱ���Dz�ͬ�ģ���Ϊ�˽�һ
����Ϣ�ͻ��������ʼ���ͻ�����Ҫ֪���Ǹ��ͻ����������ַ�Լ��˿ںš����˵���
��������Щ���Ͼ��ѷdz��ܵ��ط�װ��������Ϣ��DatagramPacket�ڲ�����������Ҫ��
��ȫ����������� getAddress()��getPort()������ȡ������������Щ���ϣ����Թ���
DatagramPacket echo������ͨ��������õ���ͬ�����ַ��ͻ�����������⣬һ����
���ַ�����ݱ����ͻ���ӡ��⡱̨�������������ַ���˿���Ϣ�����Ե��ͻ�������
Ϣʱ�����������getAddress()��getPort()�˽���ݱ����Ժδ�����ʵ�ϣ�getAddres
s()��getPort()Ψһ���ܸ���������ݱ����Ժδ���ǰ���ǣ����Ǵ���һ�����͵���
�ݱ���������ʽ����֮ǰ������getAddress()��getPort()������ݱ���ʽ���͵�ʱ��
��̨�����ĵ�ַ�Լ��˿ڲŻ�д����ݱ����������ǵõ���������ݱ�ʱһ����Ҫ��ԭ
���ظ���һ����Ϣ����Դ�أ���Ϊ��϶���������ݱ����ʵ�ϣ��Գ�����˵��
��ɿ������������Dz�Ҫ��ͼ���٣�����������ζ���Ŀ����ݱ�����ȡ����ַ�Լ���
����Ϣ������������������
Ϊ���Է���������ת�Ƿ�������������������ͻ����̣߳������Ƕ��Ὣ���
���������������Ⱥ������������ԭ����������
847-849ҳ����
ChatterClient��������һ���̣߳�Thread�������Կ����ö���ͻ�����ɧ�š���������
���п��Կ��������ڽ��յ� DatagramPacket������ChatterServer���Ǹ������Ƶġ���
�������У�����DatagramPacketʱû�и����κβ����Ա���������Ϊ����Ҫ��ȷָ
���Լ�λ���ĸ��ض���ŵĶ˿������������ֵ��������ַ����Ϊ����̨������
������localhost�������һ��Զ�����˿ڱ�ţ����������ɿ�����ͬ���ڷ�����
���Ǹ�һ�����DatagramPacket��ͬʱ���ڷ��ͺͽ��ա�
hostAddress����������֮ͨ�ŵ���̨�������������ַ���ڳ����У������Ҫ����һ��
������ȥ��DatagramPacket����ô����֪��һ��ȷ���������ַ�Ͷ˿ںš����Կ�
�����ǣ��������λ��һ����֪�ĵ�ַ�Ͷ˿ں��ϣ�ʹ�ͻ�������������ġ��Ự����
ÿ���̶߳����Լ���һ���ı�ʶ�ţ������Զ�������̵߳Ķ˿ں���Ҳ���ṩһ��Ψ
һ�ı�ʶ����run()�У����Ǵ�����һ��String��Ϣ�����а����̵߳ı�ʶ�����
�����߳������͵���Ϣ��š�����������ִ�����һ����ݱ������������ϵ�ָ����
ַ���˿ڱ����ֱ�Ӵ�ChatterServer�ڵ�һ������ȡ�á�һ����Ϣ������receive()��
����ʱ��������������ֱ���������ظ���������Ϣ������Ϣ����һ���������Ϣʹ��
��֪���ص�����ض��̵߳Ķ������Ǵ�ʼ����Ϣ��Ͷ�ݳ�ȥ�ġ�����������У�������
һ�֡����ɿ���Э�飬����Ȼ�ܹ������ݱ��Ƿ�ȥ�������Ǹ�ȥ�ĵط������� loc
alhost��LAN�������dz����ģ����ڷDZ���������ȴ���ܳ���һЩ����
���иó���ʱ����һᷢ��ÿ���̶߳����������ζ�ŷ��͵���������ÿ����ݱ���
�����ת������������ȷ�Ľ����ߡ����������һ��������߳̾ͻ������
������״̬��ֱ�����ǵ����뱻��¶������
��һ�����Ϊ���ļ���һ̨����������һ̨��Ψһ��ȷ��ʽ��ͨ��TCP���֣���Ϊ����
�ǡ��ɿ����ġ�Ȼ��������ݱ����ٶȷdz��죬���������һ�ָ�õ�ѡ������ֻ
�轫�ļ��ָ�ɶ����ݱ�����Ϊÿ�����š����ջ�����ȡ����Щ��ݰ����¡�
��װ�����ǣ�һ���������������Ӧ�ý��ն��ٸ����Լ���װ�������һЩ��
Ҫ��Ϣ�����һ�����ڰ�·���߶����ˣ����ջ����᷵��һ����ݱ������߷������ش�
��
15.5 һ��WebӦ��
����������������δ���һ��Ӧ�ã���������ʵ��Web���������У����Java�����Ʊ�
�ֵ����쾡�¡����Ӧ�õ�һ��������Web�����������е�һ�� Java������һ������
��һ��������Ƭ����СӦ�ó���Applet�����ӷ�����������������������ͻ���
�����������Ƭ���û������ռ���Ϣ�������䴫��Web�����������е�Ӧ�ó������
����dz�������Ƭ��ѯ���û���E-mail��ַ��������֤�����ַ�ϸ��û�а�
�ո�����һ��@��ţ�������E-mail����Web�������������������еij�����Ჶ
�ص���ݣ����һ����������E-mail��ַ������ļ�������Ǹ���ַ�Ѱ�����
����������������һ����Ϣ��˵����һ���������Ϣ�ɳ���Ƭ������ʾ������һ��
�µ�ַ�����������б?��֪ͨ����Ƭ�ѳɹ�����˵��Ӻ�����ַ��
�����ô�ͳ��ʽ�����������⣬����Ҫ����һ�������ı��ֶμ�һ�����ύ����Su
bmit����ť��HTMLҳ���û������ı��ֶ�������Լ�ϲ�����κ����ݣ��������谭����
������������ڿͻ��˲������κμ�飩���ύ��ݵ�ͬʱ��WebҳҲ����߷�����Ӧ��
��ݲ�ȡʲô��IJ�������֪�ᡰͨ����ؽӿڡ� ��CGI�������յ���Щ��ݺ�����
���з�����������CGI����ͨ������Perl��Cд�ģ���ʱҲ��C++����Ҫ�������֧�֣���
���ұ����ܿ���һ�п��ܳ��ֵ�����������Ȼ�����ݣ��ж��Ƿ��������ȷ�ĸ�ʽ
�������Ƿģ���CGI������봴��һ��HTMLҳ��������������������������ҳ��
ת��������������ɷ������������û����û�����������ʾ��������һ���ύ��ֱ
��ͨ��Ϊֹ���������ȷ��CGI����������ļ���Ҫô�ѵ��Ӻ�����ַ�����ļ���Ҫ
ôָ���õ�ַ��������ļ����ˡ���������������������ʽ��һ��ǡ����HTMLҳ����
����������ظ��û���
��ΪJava����Ա�������������ķ����Ե÷dz��������Һ���Ȼ�أ�����ϣ��һ�й�
������Java��ɡ����ȣ����ǻ���һ��Java����Ƭ����ͻ��˵������Ч��У�飬����
����ڷ������Ϳͻ�֮�䴫����ȥ���˷�ʱ��ʹ�?ͬʱ��������������HTMLҳ
�ĸ�����Ȼ�����Perl CGI�ű��������ڷ�����������һ��JavaӦ�á���ʵ�ϣ�������
�������ȫ�����Web��������������Ҫ�ӳ���Ƭ�������������е�JavaӦ��֮�佨��һ
�����Ӽ��ɡ�
�����Ҳ��þͻ����鵽�������ܿ������dz�����ʵ������һЩ���벻������
��ʹ�����Ե�����Щ���ӡ���Java 1.1д����Ƭ��������ģ���ʵ����ȴ�����в�ͨ
��������д����ʱ��ӵ��Java 1.1�������������Ϊ��࣬���Ҽ�ʹ�����������
�ڷdz����У����迼���չ�һ����Щ������ˡ����ԴӰ�ȫ�ĽǶȿ�������Ƭ����
���ֻ��Java 1.0��д��������һǰ�ᣬ���Dz�����JAR�ļ����ϲ���ѹ��������Ƭ�е�
.class�ļ������ԣ�����Ӧ�����ܼ���.class�ļ���ʹ������������������ʱ�䡣
���ˣ�����˵˵���õ�Web��������д���ʾ������ʱ�õľ�������ȷʵ֧��Java��
��������Java 1.0�����Է�����Ӧ��Ҳ������Java 1.0��д��
15.5.1 ������Ӧ��
��������һ�·�����Ӧ�ã��������⣬�Ұ������NameCollecor�������ռ�������
��������û�ͬʱ�����ύ���ǵ�E-mail��ַ����ô�ᷢ��ʲô����أ���NameCollec
torʹ��TCP/IP���֣���ô�����������Ƚ��ܵĶ��̻߳�����ʵ�ֶԶ���ͻ��IJ�����
�ơ���������Щ�̶߳���ͼ�����д��ͬһ���ļ�����б���������E-mail��ַ����
��Ҫ����������һ������ƣ���֤����̲߳���ͬʱ�����Ǹ��ļ���һ�����źŻ�
��������������ǴﵽĿ�ģ������?��һ�ָ�ķ�ʽ��
������ǻ�����ݱ����Ͳ���ʹ�ö��߳��ˡ��õ�����ݱ����ɡ���������������
�ݱ���һ�����ӵ��н������Ϣ������ͻ�����ʵ��Ĵ��?�����������Ϊһ����
�ݱ�����ԭ�ȷ����������������ߡ�����ݱ���·�϶�ʧ�ˣ����û���ע�û�д�
����ݴ��أ����Կ��������ύ����
������Ӧ���յ�һ����ݱ�����������н����ʱ������ȡ�����еĵ��Ӻ�����ַ
������鱾��������ļ������������Ƿ��Ѿ������Ǹ���ַ�����û�У������
֮����������������������һ���µ����⡣Java 1.0�ƺ�û���㹻������������ش���
���˵��Ӻ�����ַ���ļ���Java 1.1��Ȼ�������ǣ���C���Ϳ��Խ��������⡣
��ˣ�����������л��ѧϰ��һ����Java����ͬJava�������ӵ����㷽ʽ������ʹ
�õ� Runtime�������һ����Ϊexec()�ķ�����������������һ�������ij���
����һ��Process����̣��������ǿ���ȡ��һ�� OutputStream����ͬ�����������
�ı�����������һ�𣻲�ȡ��һ��InputStream������ͬ��������ӵ�
--
j&= y+ y* jv+ yy-v v &
wE!" j17$T 7MPC NU$E- Ej&v-
O*K^ yHH:Ovm+ UMMk BMNTO: H1="7'
jO&OH: "OH&"E~ U0H1 BB71` jCf'U:
vM1H1 jB-j1 wHhHh*-/$B)B- BkJUk
^HI'OH j""^N1 "OHOK~ H$H"Da jP'N ^
[m[1;35m�� ��Դ:���ɽ��ˮ bbs.neu.edu.cn��[FROM: 219.216.70.3][m
Technical Details
Message-ID:
<492eFf$Bey@bbs.neu.edu.cn>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!elnk-pas-nf1!elnk-nf2-pas!newsfeed.earthlink.net!sjc70.webusenet.com!news.webusenet.com!news.neu.edu.cn!NEUShow Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB X-Google-Thread: f6cb0,2e72e6423631e02d,start X-Google-Attributes: gidf6cb0,public X-Google-ArrivalTime: 2003-10-27 17:49:21 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!news.maxwell.syr.edu!elnk-pas-nf1!elnk-nf2-pas!newsfeed.earthlink.net!sjc70.webusenet.com!news.webusenet.com!news.neu.edu.cn!NEU From: amou.bbs@bbs.neu.edu.cn (�˺�2��) Newsgroups: cn.bbs.comp.lang.java Subject: Java���˼��---��15�� ������ Date: 28 Oct 2003 01:49:00 GMT Organization: ��ɽ��ˮ Message-ID: <492eFf$Bey@bbs.neu.edu.cn> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 8bit X-Filename: java/M.1067305721.A Lines: 466