云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 第10章 网络编程 - 补充案例

第10章 网络编程 - 补充案例

  • 62 次阅读
  • 3 次下载
  • 2025/5/6 8:43:45

三、案例总结

1、 在创建发送端的DatagramSocket对象时,可以不指定端口号,而案例中指定端口号目的就是,为

了每次运行时接收端的getPort()方法返回值都是一致的,否则发送端的端口号由系统自动分配,接收端的getPort()方法的返回值每次都不同。

2、 运行例程ReceiveDemo,有时会出现如图10-5所示的异常。

图10-5 运行结果

出现图中所示的情况,是因为在一台计算机中,一个端口号上只能运行一个程序,而我们编写的UDP程序所使用的端口号已经被其它的程序占用。遇到这种情况,可以在命令行窗口输入\-anb\命令来查看当前计算机端口占用情况,具体如图10-6所示。

图10-6 端口占用情况

案例10-3 多线程的UDP网络程序

一、案例描述

1、 考核知识点

编号:00110007 名称:UDP案例

2、 练习目标

? 通过编写多线程的UDP网络程序,掌握如何在单个窗口中实现接收与发送数据。

3、 需求分析

在上一个案例中,通过两个命令行窗口输出数据让我们初步了解了单线程的UDP网络程序,为了让初学者更加直观和深入的掌握网络编程,本案例将整合多线程技术,在同一个命令行窗口中同时实现接收和发送数据的功能。

4、 设计思路(实现原理)

1) 编写数据接收类ReceiveThread,该类实现了Runnable接口,重写run()方法实现不断接受客

户端发送数据的功能。

2) 编写数据发送类SendThread,该类同样实现了SendThread接口,重写run()方法实现通过键

盘录入数据,将数据向接收端发送的功能。

3) 编写测试类Example02,在main()方法中,同时启动接收端和发送端程序。

二、案例实现

UDP网络程序中接受数据端,代码如下:

import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket;

public class ReceiveThread implements Runnable {

public void run() { try {

// 创建接收端Socket对象

DatagramSocket ds = new DatagramSocket(10086); // 创建数据包 while (true) {

byte[] bys = new byte[1024];

DatagramPacket dp = new DatagramPacket(bys, bys.length); //接收数据 ds.receive(dp); // 解析数据

String ip = dp.getAddress().getHostAddress();

String s = new String(dp.getData(), 0, dp.getLength());

System.out.println(\接收端:从\主机接收到的数据是: \

}

}

}

}

if (\ }

System.out.println(\聊天室关闭******\ds.close(); break;

} catch (IOException e) {

e.printStackTrace();

UDP网络程序中发送数据端,代码如下:

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;

public class SendThread implements Runnable {

// 封装键盘录入

BufferedReader br = new BufferedReader(new InputStreamReader(

System.in));

public void run() {

try {

// 创建发送端Socket对象

DatagramSocket ds = new DatagramSocket();

// 创建数据,并打包 String line = null;

while ((line = br.readLine()) != null) { }

// 释放资源 br.close();

byte[] bys = line.getBytes();

DatagramPacket dp = new DatagramPacket(bys, bys.length,

InetAddress.getByName(\

ds.send(dp);

if (\ }

// 释放资源 br.close(); ds.close(); break;

}

}

}

ds.close();

e.printStackTrace();

} catch (IOException e) {

编写测试类Example02,代码如下:

public class Example02 { }

}

t1.start(); t2.start();

Thread t1 = new Thread(st); Thread t2 = new Thread(rt);

public static void main(String[] args) {

SendThread st = new SendThread(); ReceiveThread rt = new ReceiveThread();

运行Example02,依次键入“hello itcast”和“bye”后,结果如图10-7所示。

图10-7 运行结果

从图10-7中可以看出,Example02类实现了在一个命令行窗口中同时发送和接收数据的功能。并且当发送端发送“bye”时,程序结束。

三、案例总结

1、 在网络程序中,为了保证程序的稳定性,服务器一般不会轻易关闭,所以在编写服务端时,通常不会编写关闭服务端的代码。

2、UDP之所以是一种不可靠的网络协议,是因为UDP排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

思考:既然UDP一直被业内称为不可靠的网络协议。但是,自1980年发布以来,UDP协议仍然继续在主流应用中发挥着作用。那么,请想一想身边有哪些应用程序使用的是UDP协议。

搜索更多关于: 第10章 网络编程 - 补充案例 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

三、案例总结 1、 在创建发送端的DatagramSocket对象时,可以不指定端口号,而案例中指定端口号目的就是,为了每次运行时接收端的getPort()方法返回值都是一致的,否则发送端的端口号由系统自动分配,接收端的getPort()方法的返回值每次都不同。 2、 运行例程ReceiveDemo,有时会出现如图10-5所示的异常。 图10-5 运行结果 出现图中所示的情况,是因为在一台计算机中,一个端口号上只能运行一个程序,而我们编写的UDP程序所使用的端口号已经被其它的程序占用。遇到这种情况,可以在命令行窗口输入\-anb\命令来查看当前计算机端口占用情况,具体如图10-6所示。 图10-6 端口占用情况 案例10-3 多线程的UDP网络程序

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com