《java网络编程1.ppt》由会员分享,可在线阅读,更多相关《java网络编程1.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Hands-On实训教程系列java网络编程网络编程UDP Hands-On实训教程系列实训教程系列本章目标本章目标网络基础知识简单UDP编程图形界面的UDP聊天程序 Hands-On实训教程系列实训教程系列网络基础知识网络基础知识计算机网络计算机网络是指将分布在不同地理区域的具有独立功能的计算机通过通信设备及传输媒体被互联起来,在通信软件的支持下,实现计算机间资源共享、信息交换或协同工作的系统数据通信是计算机网络的基本功能之一,用于实现计算机之间的信息传送如在网上收发电子邮件,发布新闻消息,进行电子商务、远程教育、远程医疗,传递文字、图像、声音、视频等信息 Hands-On实训教程系列实训教
2、程系列通信协议各个独立的计算机系统之间要保证有条不紊地进行数据通信,合理地共享资源,必须达成某种默契,严格遵守事先约定好的一整套通信规程,包括严格规定要交换的数据格式、控制信息的格式和控制功能以及通信过程中事件执行的顺序等。这些通信规程我们称之为网络协议(Protocol)。网络基础知识网络基础知识 Hands-On实训教程系列实训教程系列通信协议举例网络基础知识网络基础知识你法国经理秘书(翻译成英文)传真机(国内)传真机(法国)秘书(翻译成法文)中文合作计划书法文合作计划书 Hands-On实训教程系列实训教程系列网络协议的组织方式对于结构复杂的网络协议来说,最好的组织方式是层次结构,计算机
3、网络的协议就是分层的,层与层之间相对独立,各层完成特定的功能,每一层都为上一层提供某种服务,简化了每一层的功能,降低网络通信的复杂度。我们将网络层次结构模型与计算机网络各层协议的集合称为网络的体系结构或参考模型1977年,国际标准化组织提出了开放系统互连参考模型(OSI,Open System Interconnection)的概念,1984年10月正式发布了整套OSI国际标准网络基础知识网络基础知识 Hands-On实训教程系列实训教程系列OSI参考模型将网络的功能划分为7个层次:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。如图所示。网络基础知识网络基础知识 Hands-On
4、实训教程系列实训教程系列网络基础知识应用层:与用户应用进程的接口,即相当于“做什么?”表示层:数据格式的转换,即相当于“对方看起来像什么?”会话层:会话的管理与数据传输的同步,即相当于“轮到谁讲话和从何处讲?”传输层:从端到端经网络透明地传送报文,即相当于“对方在何处?”网络层:分组交换和路由选择,即相当于“走哪条路可到达该处?”数据链路层:在链路上无差错的传送帧,即相当于“每一步该怎么走?”物理层:将比特流送到物理媒体上传送,即相当于“对上一层的每一步应该怎样利用物理媒体?”Hands-On实训教程系列实训教程系列TCP/IP参考模型参考模型 TCP/IP协议是1974年由Vinton Ce
5、rf和Robert Kahn开发的,随着Internet的飞速发展,TCP/IP协议现已成为事实上的国际标准。TCP/IP协议实际上是一组协议,是一个完整的体系结构。如图所示。Hands-On实训教程系列实训教程系列 TCP/IP与与OSI参考模型的对比参考模型的对比 TCP/IP与与OSI参考模型的对比参考模型的对比 Hands-On实训教程系列实训教程系列常用的网络协议互联网层协议IP(internet protocol)协议:提供关于数据应如何传输以及传输到何处的信息ARP(Address Resolution Protocol)协议:处理信息的路由以及主机地址解析传输层协议TCP(Tr
6、ansmission Control Protocol)协议:传输控制协议,该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换.如文件下载UDP(User Datapram Protocol)协议:用户数据报协议,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。如QQ聊天网络基础知识网络基础知识 Hands-On实训教程系列实训教程系列应用层协议HTTP(Hyper Text Transport Protocol,):超文本传输协议FTP(File Transfer Protocol):文件传输协议TELNET:远程登录协议,用于远程联接服务的标准协议或者实现此协
7、议的软件,利用远程计算机完成当前计算机不能完成的功能网络基础知识网络基础知识 Hands-On实训教程系列实训教程系列IP地址TCP/IP使用IP地址来标识源地址和目标地址IP地址格式:192.168.101.57本机回路IP地址:192.168.101.57127.0.0.1localhost域名为了便于记忆,通常将网络地址写成字符串的形式,例如百度的网址为:.由DNS负责将域名解析成IP地址 端口号逻辑意义上的数据传输通道,用整数形式表示,TCP/IP规定每台计算机拥有65535个逻辑通道每个端口号为计算机某个特定应用程序服务,www服务端口为80,FTP服务端口为21,SQL数据库服务端
8、口为1433等1024以内的端口号已绑定了相应的服务程序,用户编程中若用到端口号应选择1024以上的端口网络基础知识网络基础知识 Hands-On实训教程系列实训教程系列J包包Java中和网络通信有关的类都集中在包中 基于TCP传输协议的类为URL、URLConnection、Socket和ServerSocket 基于UDP传输协议的类为DatagramPacket、DatagramSocket和MulticastSocket 包可以大致分为两个部分 低级 API,用于处理以下抽象 地址,也就是网络标识符,如 IP 地址 套接字,也就是基本双向数据通信机制 接口,用来描述网络接口高级 API
9、,用于处理以下抽象 URI,表示统一资源标识符 URL,表示统一资源定位符 连接,表示到 URL 所指向资源的连接 Hands-On实训教程系列实训教程系列URL类类URL类简介URL是WWW统一资源定位器(Uniform Resource Locator)的简写,它规范了WWW资源网络定位地址的表示方法。WWW资源包括Web页、文本文件、图形文件、声频片段等URL基本格式protocol:/hostname:port/resourcename#anchorprotocol:使用的协议,可以是http,ftp,news,telnet等hostname:主机名port:端口号,可选resourc
10、ename:资源名,主机上能访问到的目录或文件anchor:标记,可选,指定文件中的有特定标记的位置 Hands-On实训教程系列实训教程系列InetAddress在包中提供了网络编程所用到的类,其中InetAddress类提供将主机名解析为其IP地址(或反之)的方法InetAddress常用方法在给定主机名的情况下确定主机的 IP 地址 publicstaticInetAddressgetByName(Stringhost)返回本地主机 publicstaticInetAddressgetLocalHost()获取当前 IP 地址的主机名 publicStringgetHostName()获
11、取当前IP地址的IP地址字符串publicStringgetHostAddress()Hands-On实训教程系列实训教程系列public class TestInetAddress public static void main(String args)try /当前主机 InetAddress ia1=InetAddress.getLocalHost();System.out.println(ia1);System.out.println(ia1.getHostName();System.out.println(ia1.getHostAddress();/百度主机 InetAddress
12、ia2=InetAddress.getByName();System.out.println(ia2);System.out.println(ia2.getHostName();System.out.println(ia2.getHostAddress();catch(Exception ex)ex.printStackTrace();InetAddress使用举例 Hands-On实训教程系列实训教程系列网络通信网络通信网络通信即是联网的计算机之间进行数据通信,编写网络应用程序,就是在不同的计算机之间建立关联,能够将数据发送到其他计算机或者从其他计算机获取数据网络通信的两种协议类型UDP:用
13、户数据报协议,面向非连接的协议TCP:传输控制协议,面向连接的协议 Hands-On实训教程系列实训教程系列publicclassUdpSenderpublicstaticvoidmain(Stringargs)tryDatagramSocketds=newDatagramSocket();/ds相当于邮局StringsendStr=helloworld!;/对数据打包,数据,数据长度,发送到的IP地址和端口号,端口号设定一个没被其他应用程序占用的端口DatagramPacketdp=newDatagramPacket(sendStr.getBytes(),sendStr.length(),I
14、netAddress.getByName(127.0.0.1),3000);/发送ds.send(dp);/关闭ds.close();catch(Exceptionex)System.out.println(发送失败);简单简单UDP编程编程_发送端发送端 Hands-On实训教程系列实训教程系列publicclassUdpReceiverpublicstaticvoidmain(Stringargs)tryDatagramSocketds=newDatagramSocket(3000);bytebuf=newbyte1024;DatagramPacketdp=newDatagramPacke
15、t(buf,1024);ds.receive(dp);/接收StringreceiveStr=newString(dp.getData(),0,dp.getLength()+from+dp.getAddress().getHostAddress()+:+dp.getPort();System.out.println(receiveStr);ds.close();/关闭catch(Exceptionex)ex.printStackTrace();简单简单UDP编程编程_接收端接收端 Hands-On实训教程系列实训教程系列简单简单UDP编程总结编程总结发送数据接收数据创建DatagramSock
16、et对象ds创建DatagramPacket将数据打包成dp指定发送数据的目的IP地址和端口号发送数据ds.send(dp);关闭ds:ds.close();创建DatagramSocket对象ds 指定服务的端口号创建DatagramPacket接收来自发送端的数据接收数据ds.receive(dp);关闭ds:ds.close();Hands-On实训教程系列实训教程系列简单用户界面聊天程序简单用户界面聊天程序receiveTextAreasendTextFieldIPTextField Hands-On实训教程系列实训教程系列源码源码创建接收线程public class Receiver
17、 extends Thread private JTextArea receiveTextArea;public Receiver(JTextArea receiveTextArea)this.receiveTextArea=receiveTextArea;public void run()try while(true)/接收套接字 DatagramSocket ds=new DatagramSocket(3000);byte buf=new byte1024;DatagramPacket dp=new DatagramPacket(buf,1024);ds.receive(dp);Strin
18、g receiveStr=new String(dp.getData(),0,dp.getLength();this.receiveTextArea.append(receiveStr+n);/接收方显示 ds.close();catch(Exception ex)JOptionPane.showMessageDialog(null,接收失败);Hands-On实训教程系列实训教程系列发送按钮的代码private void sendButtonActionPerformed(java.awt.event.ActionEvent evt)/TODO add your handling code
19、here:String sendStr=sendTextField.getText();String IP=IPTextField.getText();try /创建套接字 DatagramSocket ds=new DatagramSocket();/打包数据 DatagramPacket dp=new DatagramPacket(sendStr.getBytes(),sendStr.getBytes().length,InetAddress.getByName(IP),3000);/发送 ds.send(dp);sendTextField.setText();receiveTextArea.append(sendStr+n);/发送方显示 /关闭 ds.close();catch(Exception ex)JOptionPane.showMessageDialog(this,发送失败);源码源码 Hands-On实训教程系列实训教程系列在聊天窗体的构造方法中启动接收线程publicChatFrame()initComponents();Receiverreceiver=newReceiver(receiveTextArea);receiver.start();源码源码
限制150内