08Java网络编程.ppt_第1页
08Java网络编程.ppt_第2页
08Java网络编程.ppt_第3页
08Java网络编程.ppt_第4页
08Java网络编程.ppt_第5页
已阅读5页,还剩42页未读, 继续免费阅读

下载本文档

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

文档简介

1、Java网络编程,2,任务 :,理解网络的基本概念; 掌握URL类、URLconnection类、InetAddress类的用法; 理解什么是流套接字,并利用Socket类和ServerSocket类实现流套接字编程; 理解什么是数据报套接字,并利用Java语言提供的UDP编程机制实现数据报套接字编程。,3,Java与网络,Java语言取得成功的领域之一就是网络 (其他语言)数页代码-(Java)一条语句 TCP/IP(传输控制协议/网间协议)是Internet的主要协议,定义了计算机和外设进行通信所使用的规则(应用层,传输层,网络层,链路层). 大多数基于Internet的应用程序被看作TC

2、P/IP协议的上一层. 如 : ftp, http, smtp, pop3, telnet等 IP地址:TCP/IP网络中的每台计算机都有唯一的地址-IP地址. 在Java中,有一个用来存储Internet地址的类叫InetAddress.,4,Java与网络,例:获取本机的IP地址 import .*; public class getLocalHostTest public static void main() InetAddress myIP=null; try myIP=InetAddress.getLocalHost(); catch(UnknownHostException e)

3、System.out.println(myIP); 创建inetAddress类不用构造函数(不用new),5,Java与网络,下面的例子演示Java如何根据域名自动到DNS 上查找IP地址(与DNS服务器的连接减至一行) import .*; public class getIP public static void main(String args) InetAddress zust=null; try zust= InetAddress.getByName(“”); catch(UnknowHostException e) System.out.println(zust); ,6,Jav

4、a与网络,Java提供的网络功能有三大类: URL, Socket, Datagram. URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据. Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道. Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上.,7,Java基本的网络功能,URL类及其使用 URL连接(URLconnection类) InetAddress类,8,URL类及其使用,通过URL读取WWW服务器上的数据 将URL位置的数据转成一个数据流 URL url=new URL(“

5、”) DataInputStream data=new DataInputStream(url.openStream(); 从数据流中读出数据 String line=data.readLine() while(line!=null) line=data.readLine(),9,URL连接(URLconnection类)1,URL双向通信(URLConection) URLConnection是一个以http为中心的类 1. 建立连接 URL url=new URL(“ URLConnection con=url.openConnection(); 2. 向服务器端送数据 PrintStre

6、am outStream=new PrintStream(con.getOutputStream(); outStream.println(string_data);,10,URL连接(URLconnection类)2,3. 从服务器读数据 DataInputStream inStream=new DataInputStream(con.getInputStream(); inStream.readLine(); 从URL中得到的输出流通常与一个CGI程序结合一起工作,11,URL连接(URLconnection类)3,URLConnection同时支持get和post两种机制一般的格式. 缺

7、省情况下位post method方式 URL和URLConnection的区别在于前者代表一个资源的位置,后者代表一种连接,12,Java套接字编程,什么是套接字 基于TCP的通信 基于UDP的通信,13,什么是套接字(Socket)-1,Socket是网络上运行的程序之间双向通信链路的最后终结点,IP与端口的组合得出一个套接字,可以完全分辨Internet上运行的程序,14,什么是套接字(Socket)-2,端口号:TCP/IP协议为每种服务定义了一个端口,当一台计算机上运行不同服务器程序时,根据端口号不同提供相应的服务. 端口号不是计算机上的物理连接器,它只是具软件意义的假想端口,15,基

8、于TCP的通信-1,在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket实例. 在客户端通过规定一个主机和端口号创建一个 socket实例,连到服务器上. ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求 Socket类和ServerSocket是基于TCP协议的,TCP协议提供64个端口,256以内位保留端口.,16,基于TCP的通信-2,在本地机器上测试网络程序用回送地址Socket socket=new Socket(“”,2525); 如果网络的一端已经关闭,另一端读到null. 建立socket连接后,还应该建

9、立输入输出数据流.,17,基于TCP的通信-3,18,基于TCP的通信-4,下面的例子演示一个简单的服务器与客户的交互,即服务器等待,客户访问,相互通一次信息.,19,基于TCP的通信21-5,. 8.5 Socket,创建服务器(端口号),定义数据成员,服务器等待 网络连接,建立socket流,读客户 端信息,向用户发出一个字符串,创建Socket实例,定义数据成员,建立socket流,读socket流 (接收并显示),送用户名给 服务器,关闭流,waiting for user, 1111,1111,login:,connetcting client.,java,提示用户

10、登录成功,读socket流,User :java,Login successful,20,基于TCP的通信21-6,例:显示服务器与客户机间的通信(服务器端),PrintStream ps=null; DataInputStream dis=null; String username; ServerSocket serverSocket=null; Socket clientSocket=null;,try serverSocket=new ServerSocket(1111); catch (IOException e) System.out.println( “Error”+e); Sys

11、tem.exit(1);,try clientSocket=serverSocket.accept(); catch (IOException e) System.out.println(Accept failed.);System.exit(1);,创建服务器(端口号),定义数据成员,服务器等待 网络连接,21,基于TCP的通信-7,ps=new PrintStream(clientSocket.getOutputStream(); dis=new DataInputStream(clientSocket.getInputStream();,建立socket流,向客户发出登录要求,ps.pr

12、intln(login:); ps.flush();,22,基于TCP的通信-8,ps.println(login sucessful); ps.flush(); System.out.println(username+ has logged off);,读客户 端信息,通知客户连接完毕,if (username=dis.readLine()=null) System.out.println(readLine returned null); System.exit(1); System.out.println(Username:+username);,23,基于TCP的通信-9,例:显示服务器

13、与客户机间的通信(客户端),创建Socket实例,PrintStream output; DataInputStream input; String string; Socket socket=null;,定义数据成员,trysocket=new Socket(,1111); catch(IOException e) System.out.println(Error +e); return;,input=new DataInputStream(socket.getInputStream(); output=new PrintStream(socket.getOutputStr

14、eam();,建立socket流,24,基于TCP的通信-10,.,System.out.println(input.readLine();,读socket流 (看到提示),System.in.read(bArray); String s=new String(bArray,0); output.println(s);,从键盘上读送用户 名送给服务器端,关闭流,socket.close(); input.close(); output.close(); System.out.println(Done);,System.out.println(input.readLine(); System.o

15、ut.print(Logging off.);,读服务器反馈,25,基于TCP的通信21-11,. 8.5 Socket,创建服务器(端口号),定义数据成员,服务器等待 网络连接,建立socket流,读客户 端信息,向用户发送字符串,创建Socket实例,定义数据成员,建立socket流,读socket流 (看到提示),送用户名给 服务器,关闭流,waiting for user, 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User :java,Login successful,26,基于TCP的通

16、信-12,支持多客户 一种解决方案: 一台计算机上一次启动多个服务器程序,只要端口号不同.myjavaclientAndServerTest myserver myclient-f8.bat myserver2myclient2-f9.bat,27,基于TCP的通信-13,第二种方案: (支持多客户),Server,client1,client2,serverthread,serverthread,将服务器写成多线程的,不同的线程为不同的客户服务. main()只负责循环等待 线程负责网络连接,接收客户输入的信息,28,基于TCP的通信-14,.,客户1,客户2,服务器,线程(),线程2,29

17、,30,基于TCP的通信21-16,public static void main(String args) ServerSocket serverSocket=null; tryserverSocket=new ServerSocket(1111); catch(Exception e) System.out.println(”Error”+e);System.exit(1); while(true) Socket clientSocket=null; System.out.println(waiting for users.); try clientSocket=serverSocket.

18、accept(); catch(IOException e) System.out.println(accept failed:+e); new serverThread(clientSocket).start(); ,31,基于TCP的通信21-17,class serverThread extends Thread DataInputStream input; PrintStream output; String user; Socket clientSocket; serverThread(Socket clientSocket) this.clientSocket=clientSock

19、et; public void run() try input=new DataInputStream (clientSocket.getInputStream(); output=System.out; user=input.readLine(); System.out.println(user+ Connected!); catch(IOException e) try while(true) String string; if(string=input.readLine()=null) break; output.println(user+string); output.flush();

20、 catch(Exception e) return; System.out.println(user+ has disconnected.); try clientSocket.close(); input.close(); catch(Exception e) return; ,32,server,Hello 1076,Hello 1071,abc,WAIT GOabc,WAIT GOdef,def,基于TCP的通信-18,例:通过服务器交换信息(exchangebyserver),33,基于TCP的通信-19,.,服务器 (1111) accept socket,客 户,IP clien

21、t1,线程,客 户,IP client2,线程,服务器一端为了能接收多个客户的信息,它的输入流,输出流都是数组型的. ServerSocket.accept()等待用户连接,一旦连接上,则调用服务程序. 服务程序的主要内容是网络的读写,多客户的原因,网络读写的功能用多线程实现,因此将此部分功能单独分离出来,构成线程类,34,基于TCP的通信-20,client1,client2,serviceRequest,server,ServerSocket,Socket,getOutputStream,getInputStream,reader.run,reader.run,服务器端,accept(),

22、reader.start(),read_net_input,write_net_output(),35,client(),write.run,write_net_output(),read_net_input(),close_server(),客户端,writer.start(),paint(),socket,getLocalPort(),getInputStream,getOutputStream,服 务 器,基于TCP的通信-21,36,基于UDP的通信-1,TCP/IP传输层由两个并列的协议:TCP,UDP. 一般套接字(TCP)提供一个可靠的传输模型作为两个网络端点的字节流,有纠错能力

23、. UDP没有保持的连接和数据流,数据报是一个网络上发送的独立信息,它的到达,到达时间,以及内容不能得到保证.,socket,server,client,datagram,server,client,37,基于UDP的通信-2,TCP提供高可靠性服务,适用于一次要传输交换大量报文的情况,信道上传递的包不需要源地址和目的地址 UDP提供高效率服务,适用于依次传输交换少量报文的情形 (如数据库查询),每个数据包要包含目的地址和端口号. 数据报文的使用以包为中心:打包,拆包. J包支持两种不同的在网络上送数据的方法:一般套接字和数据报文套接字.,38,基于UDP的通信-3,发出报文的标准步骤如下:

24、1. 定义数据成员 DatagramSocket socket; DatagramPacket packet; InetAddress address;(用来存放接收方的地址) int port; ;(用来存放接收方的端口号) 2. 创建数据报文Socket对象 try socket=new DatagramSocket(1111); catch(.SocketException e) socket 绑定到一个本地的可用端口,等待接收客户的请求.,39,基于UDP的通信-4,3.分配并填写数据缓冲区(一个字节类型的数组) byte Buf=new byte256; 存放从客户端接收的请求信息.

25、 4.创建一个DatagramPacket packet=new DatagramPacket(buf, 256); 用来从socket接收数据,它只有两个参数 5. 服务器阻塞 socket.receive(packet); 在客户的请求报道来之前一直等待,40,基于UDP的通信-5,6. 从到来的包中得到地址和端口号 InetAddress address=packet.getAddress(); int port=packet.getPort(); 7. 将数据送入缓冲区 或来自文件,或键盘输入 8. 建立报文包,用来从socket上发送信息 packet=new DatagramPac

26、ket (buf,buf.length, address,port); 9. 发送数据包 10.关闭socket socket.send(packet); socket.close();,41,基于UDP的通信-6,客户端接收包的步骤如下: 1. 定义数据成员 int port; InetAddress address; DatagramSocket socket; DatagramPacket packet; byte sendBuf=new byte256; 2. 建立socket socket=new DatagramSocket();,42,基于UDP的通信-7,3. 向服务器发出请求报文 address=InetAddress.getByName(args0); port=parseInt(args1); packet=new DatagramPacket(sendBuf,256,address,port); socket.send(packet); 这个包本身带有客户端的信息 4. 客户机等待应答 packet=new DatagramPack

温馨提示

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

评论

0/150

提交评论