




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java 中的 TCP UDP 网络通信编程 来源 考试大 考试大 考试专家 成就梦想 2010 年 2 月 2 日 127 0 0 1 是回路地址 用于测试 相当于 localhost 本机地址 没有网卡 不设 DNS 都可以 访问 端口地址在 0 65535 之间 其中 0 1023 之间的端口是用于一些知名的网络服务和应用 用户的普通网络应用程序应该使用 1024 以上的端口 网络应用中基本上都是 TCP Transmission Control Protocol 传输控制协议 和 UDP User Datagram Protocol 用户数据报协议 TCP 是面向连接的通信协议 UDP 是无连接的通信协议 Socket 连接套接字 Java 分别为 TCP 和 UDP 提供了相应的类 TCP 是 ServerSocket 用于服务器端 和 Socket 用于客户端 UDP 是 DatagramSocket 1 Java 编写 UDP 网络程序 1 1 DatagramSocket DatagramSocket 有如下构造方法 1 DatagramSocket 构造数据报套接字并将其绑定到本地主机上任何可用的端口 2 DatagramSocket int port 创建数据报套接字并将其绑定到本地主机上的指定端口 3 DatagramSocket int port InetAddress laddr 创建数据报套接字 将其绑定到指定的本 地地址 即指定网卡发送和接收数据 如果在创建 DatagramSocket 对象时 没有指定网卡的 IP 地址 在发送数据时 底层驱动 程序会自动选择一块网卡去发送 在接收数据时 会接收所有的网卡收到的与端口一致的数据 发送信息时 可以不指定端口号 接收信息时 要指定端口号 因为要接收指定的数据 发送数据使用 DatagramSocket send DatagramPacket p 方法 接收数据使用 DatagramSocket receive DatagramPacket p 方法 1 2 DatagramPacket DatagramPacket 类有如下构造方法 1 DatagramPacket byte buf int length 构造 DatagramPacket 用来接收长度为 length 的数据包 2 DatagramPacket byte buf int length InetAddress address int port 构造数据报包 用来 将长度为 length 的包发送到指定主机上的指定端口号 接收数据时使用第一次构造方法 发送数据时使用第二种构造方法 1 3 InetAddress Java 中对 IP 地址进行包装的类 DatagramPacket getAddress 可以获取发送或接收方的 IP 地址 DatagramPacket getPort 可以获取发送或接收方的端口 1 4 UDP 程序例子 发送程序 import DatagramPacket import DatagramSocket import InetAddress public class UdpSend public static void main String args throws Exception DatagramSocket ds new DatagramSocket String str hello world DatagramPacket dp new DatagramPacket str getBytes str length InetAddress getByName 192 168 0 105 3000 ds send dp ds close 关闭连接 接收程序 import DatagramPacket import DatagramSocket public class UdpRecv public static void main String args throws Exception DatagramSocket ds new DatagramSocket 3000 byte buf new byte 1024 DatagramPacket dp new DatagramPacket buf buf length ds receive dp String str new String dp getData 0 dp getLength System out println str System out println IP dp getAddress getHostAddress PORT dp getPort ds close 来源 考试大 计算机二级考试 一 Java 网络应用模型 和 Internet 上的许多环境一样 完整的 Java 应用环境实际上也是一个客户机 服务器环境 更确切地说是浏览器 服务器模型 即 Browser Server 模型 简称 Web 模型 但与传统的 客户机 服务器 C S 的二层结构不同 应用 Java 的 Web 模型是由三层结构组成的 传统的 C S 结构通过消息传递机制 由客户端发出请求给服务器 服务器进行相应处理后经传递 机制送回客户端 而在 Web 模型中 服务器一端被分解成两部分 一部分是应用服务器 Web 服务器 另一部分是数据库服务器 Java 网络应用结构模型如图所示 HTTP TCP IP Java 网络应用模型 针对分布式计算环境 Java 通过其网络类库提供了良好的支持 对数据分布 Java 提供了 一个 URL UniformResourceLocator 对象 利用此对象可打开并访问网络上的对象 其访 问方式与访问本地文件系统几乎完全相同 对操作分布 Java 的客户机 服务器模式可以 把运算从服务器分散到客户一端 服务器负责提供查询结果 客户机负责组织结果的显示 从而提高整个系统的执行效率 增加动态可扩充性 Java 网络类库是 Java 语言为适应 Internet 环境而进行的扩展 另外 为适应 Internet 的不断发展 Java 还提供了动态扩 充协议 以不断扩充 Java 网络类库 Java 的网络类库支持多种 Internet 协议 包括 Telnet FTP 和 HTTP WWW 与此相对应的 Java 网络类库的子类库为 J J ftp J www content J www html J www http 这些子类库各自容纳了可用于处理 Internet 协议的类和方法 其中 用于处理 一些基本的网络功能 包括远程登录 Telnet ftp 用于处理 ftp 协议 www content 用于处理 WWW 页面内容 www html 和 www http 则分别提供了对 HTML 语言和 HTTP 协议的支持 二 客户机 服务器环境下的 Java 应用程序 客户机 服务器在分布处理过程中 使用基于连接的网络通信模式 该通信模式首先在客户 机和服务器之间定义一套通信协议 并创建一 Socket 类 利用这个类建立一条可靠的链接 然后 客户机 服务器再在这条链接上可靠地传输数据 客户机发出请求 服务器监听来自 客户机的请求 并为客户机提供响应服务 这就是典型的 请求 应答 模式 下面是客 户机 服务器的一个典型运作过程 1 服务器监听相应端口的输入 2 客户机发出一个请求 3 服务器接收到此请求 4 服务器处理这个请求 并把结果返回给客户机 5 重复上述过程 直至完成一次会话过程 按照以上过程 我们使用 Java 语言编写一个分别针对服务器和客户机的应用程序 Application 该程序在服务器上时 程序负责监听客户机请求 为每个客户机请求建 立 Socket 连接 从而为客户机提供服务 本程序提供的服务为 读取来自客户机的一行文 本 反转该文本 并把它发回给客户机 通过该程序实例我们看到 使用 Java 语言设计 C S 程序时需要注意以下几点 1 服务器应使用 ServerSocket 类来处理客户机的连接请求 当客户机连接到服务器所 监听的端口时 ServerSocket 将分配一新的 Socket 对象 这个新的 Socket 对象将连接到 一些新端口 负责处理与之相对应客户机的通信 然后 服务器继续监听 ServerSocket 处理新的客户机连接 Socket 和 ServerSocket 是 Java 网络类库提供的两个类 2 服务器使用了多线程机制 Server 对象本身就是一个线程 它的 run 方法是一个 无限循环 用以监听来自客户机的连接 每当有一个新的客户机连接时 ServerSocket 就 会创建一个新的 Socket 类实例 同时服务器也将创建一新线程 即一个 Connection 对象 以处理基于 Socket 的通信 与客户机的所有通信均由这个 Connection 对象处理 Connection 的构造函数将初始化基于 Socket 对象的通信流 并启动线程的运行 与客户 机的通信以及服务的提供 均由 Connection 对象处理 3 客户机首先创建一 Socket 对象 用以与服务器通信 之后需创建两个对象 DataInputStream 和 PrintStream 前者用以从 Socket 的 InputStream 输入流中读取数据 后者则用于往 Socket 的 OutputStream 中写数据 最后 客户机程序从标准输入 如 控 制台 中读取数据 并把这些数据写到服务器 在从服务器读取应答消息 然后大这些应 答消息写到到准输出 以下本别为服务器和客户机端的源程序清单 本程序在 NT4 0 网络环境 TCP IP 下使用 JDK1 1 调试通过 1 编写服务器类 Java 程序 Server java importjava io publicclassServerextendsThread publicfinalstaticintDefault Port 6543 protectdintport protectdServerSockrtlisten socket 定义出错例程 如果出现异常错误 退出程序 Publicstaticvoidfail Exceptione Stringmsg System err println msg e System exit 1 定义并启动服务器的 Socket 例程 监听客户机的连接请求 publicServer intport if port 0 port Default Port this port port try listen socket newServerSocket port catch IOExceptione fail e Exceptioncreatingserversocket System out println Server listeningonport port This start 下面为服务器监听线程的主程序 该线程一直循环执行 监听并接受客户机发出的 连接请求 对每一个连接 均产生一个连接对象与之对应 通过 Socket 通道进行通信 publicvoidrun try while true Socketclient socket listen socket accept Connectionc newConnection client socket catch IOExceptione fail e Exceptionwhilelisteningforconnections 启动服务器主程序 publicstaticvoidmain Stringargs intport 0 if args length 1 tryport Integer parseInt args 0 catch NumberFormatExceptione port 0 newServer port Endofthemain EndofServerclass 以下定义了 Connection 类 它是用来处理与客户机的所有通信的线程 classConnectionextendsThread protectedSocketclient protectedDataInputStreamin protectedPrintStreamout 初始化通信流并启动线程 publicConnection Socketclient socket client client socket try in newDataInputStream client getinputStream out newPrintStream client getOutputStream catch IOExceptione tryclient close catch IOExceptione2 System err println Exceptionwhilegettingsocketstreram e Return this start EndofConnectionmethod 服务例程 读出一行文本 反转文本 返回文本 publicvoidrun Stringline StringBufferrevline intlen try for Readaline line in readline if line null break Reversetheline len line length revline newStringBuffer len for inti len 1 i 0 i revline insert len 1 I line charAt i Writeoutthereverseline out println revline catch IOExceptione finallytryclient close catch IOExceptione2 Endofrunmethod EndofConnectionclass 2 编写客户机类 Java 程序 Client java importjava io publicclassClientextends publicstaticfinalintDefault Port 6543 定义出错例程 publicstaticfinalvoidusage System out println Usage JavaClient System exit 0 publicstaticvoidmain Stringargs intport Default Port Sockets null 解析端口参数 if args length 1 if args length 1 port Default Port else tryport Integer parseInt args 1 catch NumberFormaatExceptione usage try 产生一个 Socket 通过指定的端口与主机通信 s newSocket args 0 port 产生用于发出和接收的文本字符流 DataInputStreamsin new DataInputStream s ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融不良资产处置合同的法律风险分析与处置技巧
- 物业公司内部财务信息保密及员工竞业禁止合同
- 文化创意产业劳动合同风险防控与权益保护协议
- 大数据科技公司内部股权交易及监管协议
- 离婚协议车辆分割及财产处理明确约定合同
- 离婚协议书范本空白版涵盖子女抚养及赡养费用
- 夫妻共同债务处理协议范本及债务免除条件分析
- 旅游景区设施维护与导游服务承包协议
- 离婚协议书范本:知识产权归属与商业秘密保护协议
- 离婚纠纷调解服务合同范本
- GB 16807-2025防火膨胀密封件
- 麻醉医生进修汇报课件
- 开学第一课+课件-2025-2026学年人教版(2024)七年级英语上册
- 医院医疗收费培训课件
- 大咯血的急救和护理
- 名学快问快答题目及答案
- 2025年党员干部廉政知识中央《八项规定》知识测试题及答案
- 《人工智能基础与应用(第2版)》完整全套教学课件
- 【MOOC答案】《VLSI设计基础(数字集成电路设计基础)》(东南大学)章节作业慕课答案
- 活科技馆试题及答案
- 中小学心理健康课程标准2022版
评论
0/150
提交评论