Java2实用教程(第二版)程序代码——第二十一章 Java网络的基本知识
1
//例子1
2
import java.applet.*;import java.awt.*;
3
import java.awt.event.*;import java.net.*;
4
public class Example21_1 extends Applet implements ActionListener
5
{ Button button;
6
URL url;
7
TextField text;
8
public void init()
9
{ text=new TextField(18);
10
button=new Button("确定");
11
add(new Label("输入网址:"));add(text); add(button);
12
button.addActionListener(this);
13
}
14
public void actionPerformed(ActionEvent e)
15
{ if(e.getSource()==button)
16
{ try { url=new URL(text.getText().trim());
17
getAppletContext().showDocument(url);
18
}
19
catch(MalformedURLException g)
20
{ text.setText("不正确的URL:"+url);
21
}
22
}
23
}
24
}
25![]()
26
//例子2
27
(1)客户端程序:
28
import java.io.*;
29
import java.net.*;
30
public class Client
31
{ public static void main(String args[])
32
{ String s=null;
33
Socket mysocket;
34
DataInputStream in=null;
35
DataOutputStream out=null;
36
try{
37
mysocket=new Socket("localhost",4331);
38
in=new DataInputStream(mysocket.getInputStream());
39
out=new DataOutputStream(mysocket.getOutputStream());
40
out.writeUTF("你好!");//通过 out向"线路"写入信息。
41
while(true)
42
{
43
s=in.readUTF();//通过使用in读取服务器放入"线路"里的信息。堵塞状态,
44
//除非读取到信息。
45
out.writeUTF(":"+Math.random());
46
System.out.println("客户收到:"+s);
47
Thread.sleep(500);
48
}
49
}
50
catch(IOException e)
51
{ System.out.println("无法连接");
52
}
53
catch(InterruptedException e){}
54
}
55
}
56
(2)服务器端程序:
57
import java.io.*;import java.net.*;
58
public class Server
59
{ public static void main(String args[])
60
{ ServerSocket server=null;
61
Socket you=null;String s=null;
62
DataOutputStream out=null;DataInputStream in=null;
63
try{ server=new ServerSocket(4331);}
64
catch(IOException e1){System.out.println("ERRO:"+e1);}
65
try{ you=server.accept();
66
in=new DataInputStream(you.getInputStream());
67
out=new DataOutputStream(you.getOutputStream());
68
while(true)
69
{
70
s=in.readUTF();// 通过使用in读取客户放入"线路"里的信息。堵塞状态,
71
//除非读取到信息。
72![]()
73
out.writeUTF("你好:我是服务器");//通过 out向"线路"写入信息.
74
out.writeUTF("你说的数是:"+s);
75
System.out.println("服务器收到:"+s);
76
Thread.sleep(500);
77
}
78
}
79
catch(IOException e)
80
{ System.out.println(""+e);
81
}
82
catch(InterruptedException e){}
83
}
84
}
85![]()
86
//例子3
87
(1) 客户端
88
import java.net.*;import java.io.*;
89
import java.awt.*;import java.awt.event.*;
90
import java.applet.*;
91
public class Computer_client extends Applet implements Runnable,ActionListener
92
{ Button 计算;TextField 输入三边长度文本框,计算结果文本框;
93
Socket socket=null;
94
DataInputStream in=null; DataOutputStream out=null;
95
Thread thread;
96
public void init()
97
{ setLayout(new GridLayout(2,2));
98
Panel p1=new Panel(),p2=new Panel();
99
计算=new Button(" 计算");
100
输入三边长度文本框=new TextField(12);计算结果文本框=new TextField(12);
101
p1.add(new Label("输入三角形三边的长度,用逗号或空格分隔:"));
102
p1.add( 输入三边长度文本框);
103
p2.add(new Label("计算结果:"));p2.add(计算结果文本框);p2.add(计算);
104
计算.addActionListener(this);
105
add(p1);add(p2);
106
}
107
public void start()
108
{ try
109
{ //和小程序所驻留的服务器建立套接字连接:
110
socket = new Socket(this.getCodeBase().getHost(), 4331);
111
in =new DataInputStream(socket.getInputStream());
112
out = new DataOutputStream(socket.getOutputStream());
113
}
114
catch (IOException e){}
115
if(thread == null)
116
{ thread = new Thread(this);
117
thread.start();
118
}
119
}
120
public void run()
121
{ String s=null;
122
while(true)
123
{ try{ s=in.readUTF();//堵塞状态,除非读取到信息。
124![]()
125
计算结果文本框.setText(s);
126
}
127
catch(IOException e)
128
{ 计算结果文本框.setText("与服务器已断开");
129
break;
130
}
131
}
132
}
133
public void actionPerformed(ActionEvent e)
134
{ if(e.getSource()==计算)
135
{ String s=输入三边长度文本框.getText();
136
if(s!=null)
137
{ try { out.writeUTF(s);
138
}
139
catch(IOException e1){}
140
}
141
}
142
}
143
}
144![]()
145
(2) 服务器端
146
import java.io.*;import java.net.*;
147
import java.util.*;import java.sql.*;
148
public class Computer_server
149
{ public static void main(String args[])
150
{ ServerSocket server=null;Server_thread thread;
151
Socket you=null;
152
while(true)
153
{ try{ server=new ServerSocket(4331);
154
}
155
catch(IOException e1)
156
{ System.out.println("正在监听"); //ServerSocket对象不能重复创建。
157
}
158
try{ you=server.accept();
159
System.out.println("客户的地址:"+you.getInetAddress());
160
}
161
catch (IOException e)
162
{ System.out.println("正在等待客户");
163
}
164
if(you!=null)
165
{ new Server_thread(you).start(); //为每个客户启动一个专门的线程。
166
}
167
else
168
{ continue;
169
}
170
}
171
}
172
}
173
class Server_thread extends Thread
174
{ Socket socket;Connection Con=null;Statement Stmt=null;
175
DataOutputStream out=null;DataInputStream in=null;int n=0;
176
String s=null;
177
Server_thread(Socket t)
178
{ socket=t;
179
try { in=new DataInputStream(socket.getInputStream());
180
out=new DataOutputStream(socket.getOutputStream());
181
}
182
catch (IOException e)
183
{}
184
}
185
public void run()
186
{ while(true)
187
{ double a[]=new double[3] ;int i=0;
188
try{ s=in.readUTF();堵塞状态,除非读取到信息。
189![]()
190
StringTokenizer fenxi=new StringTokenizer(s," ,");
191
while(fenxi.hasMoreTokens())
192
{ String temp=fenxi.nextToken();
193
try{ a[i]=Double.valueOf(temp).doubleValue();i++;
194
}
195
catch(NumberFormatException e)
196
{ out.writeUTF("请输入数字字符");
197
}
198
}
199
double p=(a[0]+a[1]+a[2])/2.0;
200
out.writeUTF(" "+Math.sqrt(p*(p-a[0])*(p-a[1])*(p-a[2])));
201
sleep(2);
202
}
203
catch(InterruptedException e){}
204
catch (IOException e)
205
{ System.out.println("客户离开");
206
break;
207
}
208
}
209
}
210
}
211![]()
212
//例子4
213
import java.net.*;
214
public class DomainName
215
{ public static void main(String args[])
216
{ try{ InetAddress address_1=InetAddress.getByName("www.sina.com.cn");
217
System.out.println(address_1.toString());
218
InetAddress address_2=InetAddress.getByName("166.111.222.3");
219
System.out.println(address_2.toString());
220
}
221
catch(UnknownHostException e)
222
{ System.out.println("无法找到 www.sina.com.cn");
223
}
224
}
225
}
226![]()
227
//例子5
228
import java.net.*;
229
public class DomainName
230
{ public static void main(String args[])
231
{ try{ InetAddress address=InetAddress.getByName("www.yahoo.com");
232
String domain_name=address.getHostName();//获取 address所含的域名。
233
String IP_name=address.getHostAddress(); //获取 address所含的IP地址。
234
System.out.println(domain_name);
235
System.out.println(IP_name);
236
}
237
catch(UnknownHostException e)
238
{ System.out.println("无法找到 www.yahoo.com");
239
}
240
}
241
}
242![]()
243
//例子6
244
import java.net.*;
245
public class DomainName
246
{ public static void main(String args[])
247
{ try{ InetAddress address=InetAddress.getLocalHost();
248
String domain_name=address.getHostName();//获取 address所含的域名。
249
String IP_name=address.getHostAddress();//获取 address所含的IP地址。
250
System.out.println(domain_name);
251
System.out.println(IP_name);
252
}
253
catch(UnknownHostException e){}
254
}
255
}
256![]()
257
//例子7
258
主机1:
259
import java.net.*;import java.awt.*; import java.awt.event.*;
260
class Shanghai_Frame extends Frame implements Runnable,ActionListener
261
{ TextField out_message=new TextField("发送数据到北京:");
262
TextArea in_message=new TextArea();
263
Button b=new Button("发送数据包到北京");
264
Shanghai_Frame()
265
{ super("我是上海");
266
setSize(200,200);setVisible(true);
267
b.addActionListener(this);
268
add(out_message,"South");add(in_message,"Center");add(b,"North");
269
Thread thread=new Thread(this);
270
thread.start();//线程负责接收数据包
271
}
272
//点击按扭发送数据包:
273
public void actionPerformed(ActionEvent event)
274
{ byte buffer[]=out_message.getText().trim().getBytes();
275
try{ InetAddress address=InetAddress.getByName("localhost");
276
//数据包的目标端口是888(那么收方(北京)需在这个端口接收):
277
DatagramPacket data_pack=
278
new DatagramPacket(buffer,buffer.length, address,888);
279
DatagramSocket mail_data=new DatagramSocket();
280
in_message.append("数据报目标主机地址:"+data_pack.getAddress()+"\n");
281
in_message.append("数据报目标端口是:"+data_pack.getPort()+"\n");
282
in_message.append("数据报长度:"+data_pack.getLength()+"\n");
283
mail_data.send(data_pack);
284
}
285
catch(Exception e){}
286
}
287
//接收数据包:
288
public void run()
289
{ DatagramPacket pack=null;
290
DatagramSocket mail_data=null;
291
byte data[]=new byte[8192];
292
try{
293
pack=new DatagramPacket(data,data.length);
294
//使用端口666来接收数据包(因为北京发来的数据报的目标端口是666)。
295
mail_data=new DatagramSocket(666);
296
}
297
catch(Exception e){}
298
while(true)
299
{ if(mail_data==null) break;
300
else
301
try{ mail_data.receive(pack);
302
int length=pack.getLength(); //获取收到的数据的实际长度。
303
InetAddress adress=pack.getAddress();//获取收到的数据包的始发地址。
304
int port=pack.getPort();//获取收到的数据包的始发端口。
305
String message=new String(pack.getData(),0,length);
306
in_message.append("收到数据长度:"+length+"\n");
307
in_message.append("收到数据来自:"+adress+"端口:"+port+"\n");
308
in_message.append("收到数据是:"+message+"\n");
309
}
310
catch(Exception e){}
311
}
312
}
313
}
314
public class Shanghai
315
{ public static void main(String args[])
316
{ Shanghai_Frame shanghai_win=new Shanghai_Frame();
317
shanghai_win.addWindowListener(new WindowAdapter()
318
{ public void windowClosing(WindowEvent e)
319
{System.exit(0);
320
}
321
});
322
shanghai_win.pack();
323
}
324
}
325![]()
326
主机2:
327
import java.net.*;import java.awt.*; import java.awt.event.*;
328
class Beijing_Frame extends Frame implements Runnable,ActionListener
329
{ TextField out_message=new TextField("发送数据到上海:");
330
TextArea in_message=new TextArea();
331
Button b=new Button("发送数据包到上海");
332
Beijing_Frame()
333
{ super("我是北京");
334
setSize(200,200);setVisible(true);
335
b.addActionListener(this);
336
add(out_message,"South");add(in_message,"Center");add(b,"North");
337
Thread thread=new Thread(this);
338
thread.start();//线程负责接收数据包
339
}
340
//点击按扭发送数据包:
341
public void actionPerformed(ActionEvent event)
342
{ byte buffer[]=out_message.getText().trim().getBytes();
343
try{ InetAddress address=InetAddress.getByName("localhost");
344
//数据包的目标端口是666(那么收方(上海)需在这个端口接收):
345
DatagramPacket data_pack=
346
new DatagramPacket(buffer,buffer.length, address,666);
347
DatagramSocket mail_data=new DatagramSocket();
348
in_message.append("数据报目标主机地址:"+data_pack.getAddress()+"\n");
349
in_message.append("数据报目标端口是:"+data_pack.getPort()+"\n");
350
in_message.append("数据报长度:"+data_pack.getLength()+"\n");
351
mail_data.send(data_pack);
352
}
353
catch(Exception e){}
354
}
355
public void run()
356
{ DatagramSocket mail_data=null;
357
byte data[]=new byte[8192];
358
DatagramPacket pack=null;
359
try{
360
pack=new DatagramPacket(data,data.length);
361
//使用端口888来接收数据包(因为上海发来的数据报的目标端口是888)。
362
mail_data=new DatagramSocket(888);
363
}
364
catch(Exception e){}
365
while(true)
366
{ if(mail_data==null) break;
367
else
368
try{ mail_data.receive(pack);
369
int length=pack.getLength(); //获取收到的数据的实际长度。
370
InetAddress adress=pack.getAddress();//获取收到的数据包的始发地址。
371
int port=pack.getPort();//获取收到的数据包的始发端口。
372
String message=new String(pack.getData(),0,length);
373
in_message.append("收到数据长度:"+length+"\n");
374
in_message.append("收到数据来自:"+adress+"端口:"+port+"\n");
375
in_message.append("收到数据是:"+message+"\n");
376
}
377
catch(Exception e){}
378
}
379
}
380
}
381
public class Beijing
382
{ public static void main(String args[])
383
{ Beijing_Frame beijing_win=new Beijing_Frame();
384
beijing_win.addWindowListener(new WindowAdapter()
385
{ public void windowClosing(WindowEvent e)
386
{System.exit(0);
387
}
388
});
389
beijing_win.pack();
390
}
391
}
392![]()
393
//例子8
394
BroadCast.java:
395
import java.net.*;
396
public class BroadCast extends Thread
397
{ String s="天气预报,最高温度32度,最低温度25度";
398
int port=5858; //组播的端口.
399
InetAddress group=null; //组播组的地址.
400
MulticastSocket socket=null; //多点广播套接字.
401
BroadCast()
402
{try
403
{
404
group=InetAddress.getByName("239.255.8.0"); //设置广播组的地址为239.255.8.0。
405
socket=new MulticastSocket(port); //多点广播套接字将在port端口广播。
406
socket.setTimeToLive(1); //多点广播套接字发送数据报范围为本地网络。
407
socket.joinGroup(group); //加入广播组,加入group后,socket发送的数据报,
408
//可以被加入到group中的成员接收到。
409
}
410
catch(Exception e)
411
{ System.out.println("Error: "+ e);
412
}
413
}
414
public void run()
415
{ while(true)
416
{ try
417
{ DatagramPacket packet=null; //待广播的数据包。
418
byte data[]=s.getBytes();
419
packet=new DatagramPacket(data,data.length,group,port);
420
System.out.println(new String(data));
421
socket.send(packet); //广播数据包。
422
sleep(2000);
423
}
424
catch(Exception e)
425
{ System.out.println("Error: "+ e);
426
}
427
}
428
}
429
public static void main(String args[])
430
{
431
new BroadCast().start();
432
}
433
}
434![]()
435
Receive.java :
436![]()
437
import java.net.*;import java.awt.*;
438
import java.awt.event.*;
439
public class Receive extends Frame implements Runnable,ActionListener
440
{ int port; //组播的端口.
441
InetAddress group=null; //组播组的地址.
442
MulticastSocket socket=null; //多点广播套接字.
443
Button 开始接收,停止接收;
444
TextArea 显示正在接收内容,显示已接收的内容;
445
Thread thread; //负责接收信息的线程.
446
boolean 停止=false;
447
public Receive()
448
{ super("定时接收信息");
449
thread=new Thread(this);
450
开始接收=new Button("开始接收");
451
停止接收=new Button("停止接收");
452
停止接收.addActionListener(this);
453
开始接收.addActionListener(this);
454
显示正在接收内容=new TextArea(10,10);
455
显示正在接收内容.setForeground(Color.blue);
456
显示已接收的内容=new TextArea(10,10);
457
Panel north=new Panel();
458
north.add(开始接收);
459
north.add(停止接收);
460
add(north,BorderLayout.NORTH);
461
Panel center=new Panel();
462
center.setLayout(new GridLayout(1,2));
463
center.add(显示正在接收内容);
464
center.add(显示已接收的内容);
465
add(center,BorderLayout.CENTER);
466
validate();
467
port=5858; //设置组播组的监听端口。
468
try{
469
group=InetAddress.getByName("239.255.8.0"); /设置广播组的地址为239.255.8.0。
470
socket=new MulticastSocket(port); //多点广播套接字将在port端口广播。
471
socket.joinGroup(group); //加入广播组,加入group后,socket发送的数据报,
472
//可以被加入到group中的成员接收到。
473
}
474
catch(Exception e)
475
{ }
476
setBounds(100,50,360,380);
477
setVisible(true);
478
addWindowListener(new WindowAdapter()
479
{ public void windowClosing(WindowEvent e)
480
{ System.exit(0);
481
}
482
});
483
484
}
485
public void actionPerformed(ActionEvent e)
486
{ if(e.getSource()==开始接收)
487
{ 开始接收.setBackground(Color.blue);
488
停止接收.setBackground(Color.gray);
489
if(!(thread.isAlive()))
490
{ thread=new Thread(this);
491
}
492
try{ thread.start();
493
停止=false;
494
}
495
catch(Exception ee) {}
496
}
497
if(e.getSource()==停止接收)
498
{ 开始接收.setBackground(Color.gray);
499
停止接收.setBackground(Color.blue);
500
thread.interrupt();
501
停止=true;
502
}
503
}
504
public void run()
505
{ while(true)
506
{byte data[]=new byte[8192];
507
DatagramPacket packet=null;
508
packet=new DatagramPacket(data,data.length,group,port); //待接收的数据包。
509
try { socket.receive(packet);
510
String message=new String(packet.getData(),0,packet.getLength());
511
显示正在接收内容.setText("正在接收的内容:\n"+message);
512
显示已接收的内容.append(message+"\n");
513
}
514
catch(Exception e) {}
515
if(停止==true)
516
{ break;
517
}
518
}
519
}
520![]()
521
public static void main(String args[])
522
{
523
new Receive();
524
}
525
}
526![]()
//例子12
import java.applet.*;import java.awt.*;3
import java.awt.event.*;import java.net.*;4
public class Example21_1 extends Applet implements ActionListener5
{ Button button;6
URL url;7
TextField text;8
public void init()9
{ text=new TextField(18);10
button=new Button("确定");11
add(new Label("输入网址:"));add(text); add(button);12
button.addActionListener(this);13
}14
public void actionPerformed(ActionEvent e)15
{ if(e.getSource()==button)16
{ try { url=new URL(text.getText().trim());17
getAppletContext().showDocument(url);18
}19
catch(MalformedURLException g)20
{ text.setText("不正确的URL:"+url);21
}22
}23
}24
}25

26
//例子227
(1)客户端程序:28
import java.io.*;29
import java.net.*;30
public class Client31
{ public static void main(String args[])32
{ String s=null;33
Socket mysocket;34
DataInputStream in=null;35
DataOutputStream out=null;36
try{37
mysocket=new Socket("localhost",4331);38
in=new DataInputStream(mysocket.getInputStream());39
out=new DataOutputStream(mysocket.getOutputStream()); 40
out.writeUTF("你好!");//通过 out向"线路"写入信息。41
while(true)42
{ 43
s=in.readUTF();//通过使用in读取服务器放入"线路"里的信息。堵塞状态,44
//除非读取到信息。45
out.writeUTF(":"+Math.random());46
System.out.println("客户收到:"+s);47
Thread.sleep(500);48
} 49
}50
catch(IOException e)51
{ System.out.println("无法连接");52
}53
catch(InterruptedException e){}54
} 55
}56
(2)服务器端程序:57
import java.io.*;import java.net.*;58
public class Server59
{ public static void main(String args[])60
{ ServerSocket server=null;61
Socket you=null;String s=null;62
DataOutputStream out=null;DataInputStream in=null;63
try{ server=new ServerSocket(4331);}64
catch(IOException e1){System.out.println("ERRO:"+e1);} 65
try{ you=server.accept();66
in=new DataInputStream(you.getInputStream());67
out=new DataOutputStream(you.getOutputStream());68
while(true)69
{70
s=in.readUTF();// 通过使用in读取客户放入"线路"里的信息。堵塞状态,71
//除非读取到信息。72

73
out.writeUTF("你好:我是服务器");//通过 out向"线路"写入信息.74
out.writeUTF("你说的数是:"+s);75
System.out.println("服务器收到:"+s);76
Thread.sleep(500);77
}78
}79
catch(IOException e)80
{ System.out.println(""+e);81
}82
catch(InterruptedException e){}83
}84
}85

86
//例子387
(1) 客户端88
import java.net.*;import java.io.*;89
import java.awt.*;import java.awt.event.*;90
import java.applet.*;91
public class Computer_client extends Applet implements Runnable,ActionListener92
{ Button 计算;TextField 输入三边长度文本框,计算结果文本框;93
Socket socket=null;94
DataInputStream in=null; DataOutputStream out=null;95
Thread thread; 96
public void init()97
{ setLayout(new GridLayout(2,2));98
Panel p1=new Panel(),p2=new Panel(); 99
计算=new Button(" 计算");100
输入三边长度文本框=new TextField(12);计算结果文本框=new TextField(12);101
p1.add(new Label("输入三角形三边的长度,用逗号或空格分隔:"));102
p1.add( 输入三边长度文本框);103
p2.add(new Label("计算结果:"));p2.add(计算结果文本框);p2.add(计算);104
计算.addActionListener(this);105
add(p1);add(p2);106
}107
public void start()108
{ try109
{ //和小程序所驻留的服务器建立套接字连接:110
socket = new Socket(this.getCodeBase().getHost(), 4331); 111
in =new DataInputStream(socket.getInputStream());112
out = new DataOutputStream(socket.getOutputStream());113
} 114
catch (IOException e){}115
if(thread == null)116
{ thread = new Thread(this);117
thread.start();118
}119
}120
public void run()121
{ String s=null;122
while(true)123
{ try{ s=in.readUTF();//堵塞状态,除非读取到信息。124

125
计算结果文本框.setText(s);126
}127
catch(IOException e) 128
{ 计算结果文本框.setText("与服务器已断开");129
break;130
} 131
}132
}133
public void actionPerformed(ActionEvent e)134
{ if(e.getSource()==计算)135
{ String s=输入三边长度文本框.getText();136
if(s!=null)137
{ try { out.writeUTF(s);138
}139
catch(IOException e1){} 140
} 141
}142
}143
}144

145
(2) 服务器端146
import java.io.*;import java.net.*;147
import java.util.*;import java.sql.*;148
public class Computer_server 149
{ public static void main(String args[])150
{ ServerSocket server=null;Server_thread thread;151
Socket you=null;152
while(true) 153
{ try{ server=new ServerSocket(4331);154
}155
catch(IOException e1) 156
{ System.out.println("正在监听"); //ServerSocket对象不能重复创建。157
} 158
try{ you=server.accept();159
System.out.println("客户的地址:"+you.getInetAddress());160
}161
catch (IOException e)162
{ System.out.println("正在等待客户");163
}164
if(you!=null) 165
{ new Server_thread(you).start(); //为每个客户启动一个专门的线程。 166
}167
else 168
{ continue;169
}170
}171
}172
}173
class Server_thread extends Thread174
{ Socket socket;Connection Con=null;Statement Stmt=null;175
DataOutputStream out=null;DataInputStream in=null;int n=0;176
String s=null;177
Server_thread(Socket t)178
{ socket=t;179
try { in=new DataInputStream(socket.getInputStream());180
out=new DataOutputStream(socket.getOutputStream());181
}182
catch (IOException e)183
{}184
} 185
public void run() 186
{ while(true)187
{ double a[]=new double[3] ;int i=0;188
try{ s=in.readUTF();堵塞状态,除非读取到信息。189

190
StringTokenizer fenxi=new StringTokenizer(s," ,");191
while(fenxi.hasMoreTokens())192
{ String temp=fenxi.nextToken();193
try{ a[i]=Double.valueOf(temp).doubleValue();i++;194
}195
catch(NumberFormatException e)196
{ out.writeUTF("请输入数字字符");197
}198
}199
double p=(a[0]+a[1]+a[2])/2.0;200
out.writeUTF(" "+Math.sqrt(p*(p-a[0])*(p-a[1])*(p-a[2])));201
sleep(2); 202
}203
catch(InterruptedException e){}204
catch (IOException e) 205
{ System.out.println("客户离开");206
break;207
}208
}209
} 210
}211

212
//例子4213
import java.net.*; 214
public class DomainName215
{ public static void main(String args[])216
{ try{ InetAddress address_1=InetAddress.getByName("www.sina.com.cn");217
System.out.println(address_1.toString()); 218
InetAddress address_2=InetAddress.getByName("166.111.222.3");219
System.out.println(address_2.toString());220
}221
catch(UnknownHostException e)222
{ System.out.println("无法找到 www.sina.com.cn");223
} 224
}225
}226

227
//例子5 228
import java.net.*; 229
public class DomainName230
{ public static void main(String args[])231
{ try{ InetAddress address=InetAddress.getByName("www.yahoo.com");232
String domain_name=address.getHostName();//获取 address所含的域名。233
String IP_name=address.getHostAddress(); //获取 address所含的IP地址。234
System.out.println(domain_name); 235
System.out.println(IP_name);236
}237
catch(UnknownHostException e)238
{ System.out.println("无法找到 www.yahoo.com");239
} 240
}241
}242

243
//例子6244
import java.net.*; 245
public class DomainName246
{ public static void main(String args[])247
{ try{ InetAddress address=InetAddress.getLocalHost();248
String domain_name=address.getHostName();//获取 address所含的域名。249
String IP_name=address.getHostAddress();//获取 address所含的IP地址。250
System.out.println(domain_name); 251
System.out.println(IP_name);252
}253
catch(UnknownHostException e){} 254
}255
}256

257
//例子7258
主机1:259
import java.net.*;import java.awt.*; import java.awt.event.*;260
class Shanghai_Frame extends Frame implements Runnable,ActionListener261
{ TextField out_message=new TextField("发送数据到北京:");262
TextArea in_message=new TextArea(); 263
Button b=new Button("发送数据包到北京");264
Shanghai_Frame()265
{ super("我是上海");266
setSize(200,200);setVisible(true);267
b.addActionListener(this);268
add(out_message,"South");add(in_message,"Center");add(b,"North");269
Thread thread=new Thread(this);270
thread.start();//线程负责接收数据包271
}272
//点击按扭发送数据包:273
public void actionPerformed(ActionEvent event)274
{ byte buffer[]=out_message.getText().trim().getBytes();275
try{ InetAddress address=InetAddress.getByName("localhost");276
//数据包的目标端口是888(那么收方(北京)需在这个端口接收):277
DatagramPacket data_pack=278
new DatagramPacket(buffer,buffer.length, address,888);279
DatagramSocket mail_data=new DatagramSocket();280
in_message.append("数据报目标主机地址:"+data_pack.getAddress()+"\n");281
in_message.append("数据报目标端口是:"+data_pack.getPort()+"\n");282
in_message.append("数据报长度:"+data_pack.getLength()+"\n");283
mail_data.send(data_pack);284
}285
catch(Exception e){} 286
} 287
//接收数据包:288
public void run()289
{ DatagramPacket pack=null;290
DatagramSocket mail_data=null;291
byte data[]=new byte[8192];292
try{ 293
pack=new DatagramPacket(data,data.length);294
//使用端口666来接收数据包(因为北京发来的数据报的目标端口是666)。295
mail_data=new DatagramSocket(666);296
}297
catch(Exception e){} 298
while(true) 299
{ if(mail_data==null) break;300
else301
try{ mail_data.receive(pack); 302
int length=pack.getLength(); //获取收到的数据的实际长度。303
InetAddress adress=pack.getAddress();//获取收到的数据包的始发地址。304
int port=pack.getPort();//获取收到的数据包的始发端口。305
String message=new String(pack.getData(),0,length);306
in_message.append("收到数据长度:"+length+"\n");307
in_message.append("收到数据来自:"+adress+"端口:"+port+"\n");308
in_message.append("收到数据是:"+message+"\n");309
}310
catch(Exception e){}311
} 312
}313
}314
public class Shanghai315
{ public static void main(String args[])316
{ Shanghai_Frame shanghai_win=new Shanghai_Frame();317
shanghai_win.addWindowListener(new WindowAdapter()318
{ public void windowClosing(WindowEvent e)319
{System.exit(0);320
}321
});322
shanghai_win.pack();323
}324
} 325

326
主机2:327
import java.net.*;import java.awt.*; import java.awt.event.*;328
class Beijing_Frame extends Frame implements Runnable,ActionListener329
{ TextField out_message=new TextField("发送数据到上海:");330
TextArea in_message=new TextArea(); 331
Button b=new Button("发送数据包到上海");332
Beijing_Frame()333
{ super("我是北京");334
setSize(200,200);setVisible(true);335
b.addActionListener(this);336
add(out_message,"South");add(in_message,"Center");add(b,"North");337
Thread thread=new Thread(this);338
thread.start();//线程负责接收数据包339
}340
//点击按扭发送数据包:341
public void actionPerformed(ActionEvent event)342
{ byte buffer[]=out_message.getText().trim().getBytes();343
try{ InetAddress address=InetAddress.getByName("localhost");344
//数据包的目标端口是666(那么收方(上海)需在这个端口接收):345
DatagramPacket data_pack=346
new DatagramPacket(buffer,buffer.length, address,666);347
DatagramSocket mail_data=new DatagramSocket();348
in_message.append("数据报目标主机地址:"+data_pack.getAddress()+"\n");349
in_message.append("数据报目标端口是:"+data_pack.getPort()+"\n");350
in_message.append("数据报长度:"+data_pack.getLength()+"\n");351
mail_data.send(data_pack);352
}353
catch(Exception e){} 354
} 355
public void run()356
{ DatagramSocket mail_data=null;357
byte data[]=new byte[8192];358
DatagramPacket pack=null;359
try{360
pack=new DatagramPacket(data,data.length);361
//使用端口888来接收数据包(因为上海发来的数据报的目标端口是888)。362
mail_data=new DatagramSocket(888);363
}364
catch(Exception e){} 365
while(true) 366
{ if(mail_data==null) break;367
else368
try{ mail_data.receive(pack); 369
int length=pack.getLength(); //获取收到的数据的实际长度。370
InetAddress adress=pack.getAddress();//获取收到的数据包的始发地址。371
int port=pack.getPort();//获取收到的数据包的始发端口。372
String message=new String(pack.getData(),0,length);373
in_message.append("收到数据长度:"+length+"\n");374
in_message.append("收到数据来自:"+adress+"端口:"+port+"\n");375
in_message.append("收到数据是:"+message+"\n");376
}377
catch(Exception e){}378
}379
}380
}381
public class Beijing382
{ public static void main(String args[])383
{ Beijing_Frame beijing_win=new Beijing_Frame();384
beijing_win.addWindowListener(new WindowAdapter()385
{ public void windowClosing(WindowEvent e)386
{System.exit(0);387
}388
});389
beijing_win.pack();390
}391
} 392

393
//例子8394
BroadCast.java:395
import java.net.*;396
public class BroadCast extends Thread 397
{ String s="天气预报,最高温度32度,最低温度25度"; 398
int port=5858; //组播的端口. 399
InetAddress group=null; //组播组的地址.400
MulticastSocket socket=null; //多点广播套接字. 401
BroadCast() 402
{try 403
{404
group=InetAddress.getByName("239.255.8.0"); //设置广播组的地址为239.255.8.0。405
socket=new MulticastSocket(port); //多点广播套接字将在port端口广播。406
socket.setTimeToLive(1); //多点广播套接字发送数据报范围为本地网络。407
socket.joinGroup(group); //加入广播组,加入group后,socket发送的数据报,408
//可以被加入到group中的成员接收到。409
} 410
catch(Exception e)411
{ System.out.println("Error: "+ e); 412
}413
}414
public void run()415
{ while(true) 416
{ try417
{ DatagramPacket packet=null; //待广播的数据包。418
byte data[]=s.getBytes(); 419
packet=new DatagramPacket(data,data.length,group,port); 420
System.out.println(new String(data)); 421
socket.send(packet); //广播数据包。422
sleep(2000);423
}424
catch(Exception e)425
{ System.out.println("Error: "+ e); 426
}427
}428
}429
public static void main(String args[])430
{431
new BroadCast().start();432
}433
}434

435
Receive.java :436

437
import java.net.*;import java.awt.*; 438
import java.awt.event.*;439
public class Receive extends Frame implements Runnable,ActionListener440
{ int port; //组播的端口. 441
InetAddress group=null; //组播组的地址.442
MulticastSocket socket=null; //多点广播套接字. 443
Button 开始接收,停止接收; 444
TextArea 显示正在接收内容,显示已接收的内容; 445
Thread thread; //负责接收信息的线程.446
boolean 停止=false;447
public Receive()448
{ super("定时接收信息");449
thread=new Thread(this);450
开始接收=new Button("开始接收");451
停止接收=new Button("停止接收");452
停止接收.addActionListener(this); 453
开始接收.addActionListener(this); 454
显示正在接收内容=new TextArea(10,10);455
显示正在接收内容.setForeground(Color.blue); 456
显示已接收的内容=new TextArea(10,10);457
Panel north=new Panel();458
north.add(开始接收);459
north.add(停止接收);460
add(north,BorderLayout.NORTH);461
Panel center=new Panel();462
center.setLayout(new GridLayout(1,2)); 463
center.add(显示正在接收内容);464
center.add(显示已接收的内容);465
add(center,BorderLayout.CENTER);466
validate();467
port=5858; //设置组播组的监听端口。468
try{469
group=InetAddress.getByName("239.255.8.0"); /设置广播组的地址为239.255.8.0。470
socket=new MulticastSocket(port); //多点广播套接字将在port端口广播。471
socket.joinGroup(group); //加入广播组,加入group后,socket发送的数据报,472
//可以被加入到group中的成员接收到。473
}474
catch(Exception e)475
{ } 476
setBounds(100,50,360,380); 477
setVisible(true);478
addWindowListener(new WindowAdapter()479
{ public void windowClosing(WindowEvent e)480
{ System.exit(0);481
}482
});483
484
}485
public void actionPerformed(ActionEvent e)486
{ if(e.getSource()==开始接收)487
{ 开始接收.setBackground(Color.blue);488
停止接收.setBackground(Color.gray);489
if(!(thread.isAlive()))490
{ thread=new Thread(this);491
}492
try{ thread.start(); 493
停止=false; 494
}495
catch(Exception ee) {}496
}497
if(e.getSource()==停止接收)498
{ 开始接收.setBackground(Color.gray);499
停止接收.setBackground(Color.blue);500
thread.interrupt(); 501
停止=true; 502
}503
}504
public void run()505
{ while(true) 506
{byte data[]=new byte[8192];507
DatagramPacket packet=null;508
packet=new DatagramPacket(data,data.length,group,port); //待接收的数据包。509
try { socket.receive(packet);510
String message=new String(packet.getData(),0,packet.getLength());511
显示正在接收内容.setText("正在接收的内容:\n"+message);512
显示已接收的内容.append(message+"\n");513
}514
catch(Exception e) {}515
if(停止==true)516
{ break;517
} 518
} 519
}520

521
public static void main(String args[])522
{ 523
new Receive();524
}525
}526




浙公网安备 33010602011771号