第5章网络编程_第1页
第5章网络编程_第2页
第5章网络编程_第3页
第5章网络编程_第4页
第5章网络编程_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、慧学国际科技发展(深圳)有限公司网络编程JavaEE开发工程师Java 高级编程 网络概念及通信协议分层思想 TCP/IP协议 Java对网络编程的支持 TCP、UDP通信协议的Java实现Contents目录网络编程基本概念TCP/IP(Transmission Control Protocol传输控制协议/Internet Protocol网间协议)是Internet的主要协议,定义了计算机和外设进行通信所使用的规则。TCP/IP网络参考模型包括五个层次:应用层、传输层、网络层、链路层、物理层。 应用层表示层会话层传输层网络层数据链路层物理层在TCP/IP网络中,不同的机器之间进行通信时,

2、数据的传输是由传输层传输层控制的,这包括数据要发往的目标机器及应用程序、数据的质量控制等。 TCP/IP网络中最常用的传输协议就是TCPTCP(Transport Control Protocol)和UDPUDP(User Datagram Protocol)。网络编程基本概念 一台机器通常只通过一条链路连接到网络上,即它只有一个IP地址,但一台机器中往往有很多应用程序需要进行网络通信,如何区分呢? 端口号是一个标记机器的逻辑通信信道逻辑通信信道的正整数,端口 号不是物理实体。IP地址和端口号组成了所谓的SocketSocket,Socket是网络上运行的程序之间双向通信链路的最后终结点,它是

3、TCP和UDP的基础。网络编程基本概念网络服务网络服务httpftp其他服务23telnet端口端口2180客户程序客户程序SocketIP,port网络编程基本构图 端口号是用一个16位的整数来表达的,其范围为0 65535,其中01023为系统所保留,专门给那些通用 的服务(well-known services) 如http服务的端口号为80,telnet服务的端口号为21, ftp服务的端口为23,因此,当我们编写通信程序 时,应选择一个大于1023的数作为端口号,以免发生 冲突。什么是端口号1. 传输控制协议(TCP)是在端点与端点之间建立持续的连接而进行 通信。2. 建立连接后,发

4、送端将发送的数据印记了序列号和错误检测代码, 并以字节流的方式发送出去;接收端则对数据进行错误检查并按 序列顺序将数据整理好,数据在需要时可以重新发送,因此整个 字节流到达接收端时完好无缺。这与两个人打电话的情形是相似 的。3. TCP协议具有可靠性和有序性,并且以字节流的方式发送数据,它 通常被称为流通信协议。TCP简介TCP/IP协议使用Thread子类创建线程的优点是:我们可以在子类中增加新的成员变量,使线程具有某种属性,也可以在子类中新增加方法,使线程具有某种功能。但是,Java不支持多继承,Thread类的子类不能再扩展其他的类。使用Runable接口与TCP协议不同,用户数据报协议

5、(UDP)则是一种无连无连接接的传输协议首先需要将要传输的数据定义成数据报(Datagram),在数据报中指明数据所要达到的端点(Socket,主机地址和端口号),然后再将数据报发送出去。 特点: 这种传输方式是无序的,也不能确保绝对的安全可靠,但它很简单也具有比较高的效率,这与通过邮局发邮局发送邮件送邮件的情形非常相似。UDP 与 TCP的不同TCP协议和UDP协议各有各的用处。当对所传输的数据具有时序性和可靠性等要求时,应使用TCP协议;当传输的数据比较简单、对时序等无要求时,UDP协议能发挥更好的作用,如ping、发送时间数据等。TCP与UDP对比UDPTCP/IP传输效率不需建立连接,

6、直接传受传输前需要建立连接传输大小最大64KB无限制可靠性不可靠的协议可靠的Java提供的网络功能类 InetAddress面向的是网络层(网络层(IP层)层),用于标识网络上的硬件资源 URL面向的应用层应用层,通过URL,Java程序可以直接送出或读入网络上的数据 Sockets和Datagram面向的则是传输层传输层。针对网络通信的不同层次,针对网络通信的不同层次,Java提供的网络功能有四大类:提供的网络功能有四大类:Java对网络编程的支持InetAddresspublic static InetAddress getByName(String host):host可以是一个机器名,

7、也可以是一个形如“%d.%d.%d.%d”的IP地址或一个DSN域public static InetAddress getLocalHost() :返回本地主机public static InetAddress getAllByName(String host):根据系统上配置的名称服务返回其IP地址所组成的数组public static InetAddress getByAddress(String host, Byte addr):根据提供的主机名和IP地址创建InetAddressInetAddress:用于标识网络上的硬件资源,它提供了一系列方法以描述、获取及使用网络资源。 Inet

8、Addressimport .*;try InetAddress address=InetAddress.getLocalHost();/将此将此IP地址转换为地址转换为StringSystem.out.println(address.toString();/获取此获取此IP地址的主机名地址的主机名System.out.println(address.getHostName();/获取获取IPSystem.out.println(address.getHostAddress(); catch (UnknownHostException e) e.printStackTrace();URL介绍U

9、RL是统一资源定位符(Uniform Resource Locator)的简称,它表示Internet上某一资源的地址。Internet上的资源包括HTML文件、图象文件、声音文件、动画文件以及其他任何内容(并不完全是文件,也可以是一个对数据库的查询等)。通过URL,就可以访问Internet。浏览器或其他程序通过解析给定的URL就可以在网络上查找相应的文件或其他资源。一个URL包括两部分内容:协议名称和资源名称协议名称和资源名称,中间用冒号隔开:Protocol:resourceName 如:http:/获取URL的方法public String getProtocol():获取该URL的协

10、议名public String getHost() :获取该URL的主机名public String getPort() :获取该URL的端口号public String getPath() :获取该URL的文件路径public String getFile() :获取该URL的文件名public String getRef() :获取该URL在文件中的相对位置public String getQuery() :获取该URL的查询名使用URL获取网站信息URL gis=new URL();System.out.println(Protocol:+gis.getProtocol();System

11、.out.println(hostname:+gis.getHost();System.out.println(port:+gis.getPort();System.out.println(file:+gis.getFile(); BufferedReader in=new BufferedReader(new InputStreamReader(gis.openStream(),utf-8); /读取网站信息 String line; while(line=in.readLine()!=null)System.out.println(line); in.close();方法方法openStr

12、eam()openStream()与指定的与指定的URLURL建立建立连接并返回一个连接并返回一个InputStreamInputStream对象,对象,将将URLURL位置的资源转成一个输入数据位置的资源转成一个输入数据流。通过这个流。通过这个InputStreamInputStream对象,就对象,就可以读取资源中的数据可以读取资源中的数据URLJava 程序程序InputStream HTTPURLConnection用用HTTPURLConnection类提交请求到百度搜索并获取搜索后的结果。请类提交请求到百度搜索并获取搜索后的结果。请求搜索内容:求搜索内容:java百度搜索_java

13、 . 搜索结果:搜索结果:(代码是搜索后返回的代码是搜索后返回的html源码源码,图片为浏览器显示效果图片为浏览器显示效果)public class TestParamURL public static void main(String args) String strUrl = http:/ param = wd=java;System.out.println(sendGet(strUrl, param);/ 以GET方式提交HTTP请求到服务器,并返回结果public static String sendGet(String url, String param) String result

14、 = ;try String urlName = url + ? + param;URL u = new URL(urlName);URLConnection connection = u.openConnection();catch().代码展示connection.connect();BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream();String line;while (line = in.readLine() != null) result += n + lin

15、e;in.close(); catch (Exception e) System.out.println(没有结果! + e);return result;衔接上一页/* * 以POST方式提交HTTP请求到服务器,并返回结果* 参数形式为参数名=值&参数名=值*/public static String sendPost(String url, String param) String result = ;try URL httpurl = new URL(url);HttpURLConnection httpConn = (HttpURLConnection) httpurl.op

16、enConnection();/ 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;httpConn.setDoOutput(true);/ 设置是否从httpUrlConnection读入,默认情况下是true;衔接上一页httpConn.setDoInput(true);/ Post 请求不能使用缓存httpConn.setUseCaches(false);/ 设定传送的内容类型是可序列化的java对象/ (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能/抛java.i

17、o.EOFException)httpConn.setRequestProperty(Content-type,application/x-java-serialized-object);/ 设定请求的方法为POST,默认是GEThttpConn.setRequestMethod(POST);衔接上一页/ 利用输出流向服务器传送参数,参数形式为参数名=值&参数名=值PrintWriter out = new PrintWriter(httpConn.getOutputStream();out.print(param);out.flush();out.close();BufferedRe

18、ader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream();String line;while (line = in.readLine() != null) result += n + line;in.close(); catch (Exception e) System.out.println(没有结果! + e);return result;衔接上一页TCP 与 UDP通信协议的Java实现Socket套接字Socket套接字:把网络连接当成一个流,可以通过流的方式实现数据的交换。服务器套接字(S

19、erverSocket)客户端套接字客户端套接字Socket(String host,int port) Socket(InetAddress address,int port)public InetAddress getInetAddress()public int getPort()public int getLocalPort()public InetAddress getLocalAddress()public InputStream getInputStream() throws IOExceptionpublic OutputStream getOutputStream() thr

20、ows IOExceptionpublic void close() throws IOException服务器端套接字ServerSocket()ServerSocket(int port)ServerSocket(int port,int backlog)ServerSocket(int port,int backlog,InetAddress bindAddr)服务器端套接字服务器端套接字:每个服务器端套接字运行在服务器上特定的端口,监听这个端口的TCP连接。Socket accept():监听并接受到此套接字的连接监听并接受到此套接字的连接void close():关闭此套接字关闭此套

21、接字Socket TCP通信基本步骤第1步:在客户端和服务器端创建Socket/ServerSocket实例第2步:打开连接到Socket的输入/输出流第3步:利用输入/输出流,按照一定的协议对Socket进行读/写操作第4步:关闭输入/输出流和Socket创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接建立建立socket流流读客户端信息读客户端信息向用户发出一个字符串向用户发出一个字符串创建创建Socket实例实例定义数据成员定义数据成员建立建立socket流流读读socket流流(接收并显示)(接收并显示)发送用户名给服务器发送用户名给服务

22、器关闭流关闭流waiting for user 34343434提示用户登录成功提示用户登录成功读读socket流流关闭流关闭流服务器端服务器端客户端客户端Socket通信示例try try ServerSocket s = new ServerSocket(3434); / 1 ServerSocket s = new ServerSocket(3434); / 1、建立、建立SocketSocket while (true) while (true) Socket s1 = s.accept();Socket s1 = s.accept();/ 2/ 2、在客户端和服务器

23、端同时打开输入、在客户端和服务器端同时打开输入/ /输出流输出流/ BufferedWriter bw = new BufferedWriter(/ BufferedWriter bw = new BufferedWriter(/ new OutputStreamWriter(s1.getOutputStream();/ new OutputStreamWriter(s1.getOutputStream();/ bw.write(/ bw.write(你好你好, +s1.getInetAddress()+ : + s1.getPort();, +s1.getInetAddress()+ : +

24、 s1.getPort();/ bw.close();/ bw.close();/ / 服务器端读信息服务器端读信息BufferedReader br = new BufferedReader(new BufferedReader br = new BufferedReader(new InputStreamReader(s1InputStreamReader(s1.getInputStream();.getInputStream();String str = br.readLine();String str = br.readLine();System.System.outout.println(.println(客户端说客户端说: + str);: + str);s1.close();s1.close(); catch (IOException e) catch (IOException e) e.printStackTrace(); e.printStackTrace(); System. System.outout.println(.println(程序运行出错程序运行出错: + e);: + e); TCPServer.javaSocket通信示例try Socket s =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论