java与网络编程.ppt

上传人:牧羊曲112 文档编号:5436021 上传时间:2023-07-06 格式:PPT 页数:56 大小:336KB
返回 下载 相关 举报
java与网络编程.ppt_第1页
第1页 / 共56页
java与网络编程.ppt_第2页
第2页 / 共56页
java与网络编程.ppt_第3页
第3页 / 共56页
java与网络编程.ppt_第4页
第4页 / 共56页
java与网络编程.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《java与网络编程.ppt》由会员分享,可在线阅读,更多相关《java与网络编程.ppt(56页珍藏版)》请在三一办公上搜索。

1、第八讲:java与网络编程,目录,1、Java与internet2、使用InetAddress和URL3、URL连接4、访问WWW资源5、Socket6、数据报,1、Java与网络,网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据

2、的。TCP/IP(传输控制协议/网间协议)是internet的主要协议,定义了计算机和外设进行通信所使用的规则(应用层,传输层,网络层,链路层).,1、Java与网络,IP地址:标识计算机等网络设备的网络地址,由四个8位的二进制数组成,中间以小数点分隔。如:166.111.136.3,166.111.52.80主机名(hostname):网络地址的助记名,按照域名进行分级管理。如:端口号(port number):网络通信时同一机器上的不同进程的标识。如:80,21,23,25,其中11024为系统保留的端口号服务类型(service):网络的各种服务。http,telnet,ftp,smtp

3、,1、Java与网络,例:获取本机的IP地址import.*;public class getLocalHostTest public static void main()InetAddress myIP=null;try myIP=InetAddress.getLocalHost();catch(UnknowHostException e)System.out.println(myIP);,1、Java与网络,Java提供的网络功能有三大类:URL,Socket,Datagram.URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据.Socket是传统网络程

4、序最常用的方式,可以想象为两个不同的程序通过网络的通信信道.Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上.,2.1、InetAddress类,InetAddress类主要用来区分计算机网络中不同节点,即不同的计算机并对其寻址。,2.1、InetAddress类,下面的例子演示java如何根据域名自动到DNS上查找IP地址(与DNS服务器的连接减至一行)import.*;public class getIP public static void main(String args)InetAddress pku=null;try pku=”);catch

5、(UnknowHostException e)System.out.println(pku);,2.2、使用URL,URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。URL是最为直观的一种网络定位方法。使用URL符合人们的语言习惯,容易记忆,所以应用十分广泛。而且在目前使用最为广泛的TCP/IP中对于URL中主机名的解析也是协议的一个标准,即所谓的域名解析服务。,2.2、使

6、用URL,protocol:/resourceName协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gopher、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:协议名:/主机名http:/协议名:/机器名文件名http:/:80/Gamelan/network.html#BOTTOM 协议名:/机器名端口号文件名内部引用,2.2、使用URL,我们可以通过下面的构造方法来初始化一个URL对象:(1)public URL(String spec);通过一个表示URL地址的字符串可以构造一个U

7、RL对象。URL urlBase=new URL(http:/www.(2)public URL(URL context,String spec);通过基URL和相对URL构造一个URL对象。URL net263=new URL(“http:/index263=new URL(net263,“index.html”);(3)public URL(String protocol,String host,String file);new URL(http,/pages/G.html);(4)public URL(String protocol,String host,int port,String

8、 file);URL gamelan=new URL(http,80,Pages/Gwork.html);,2.2、使用URL,public String getProtocol()获取该URL的协议名。public String getHost()获取该URL的主机名。public int getPort()获取该URL的端口号,如果没有设置端口,返回-1。public String getFile()获取该URL的文件名。public String getRef()获取该URL在文件中的相对位置。public String getQuery()获取该URL的查询信息。public Stri

9、ng getPath()获取该URL的路径public String getAuthority()获取该URL的权限信息public String getUserInfo()获得使用者的信息public String getRef()获得该URL的锚,2.2、使用URL,通过URL读取WWW服务器上的数据将URL位置的数据转成一个数据流,URL url=new(”);DataInputStream data=new DataInputStream(url.openStream();/*从数据流中读出数据*/String line=data.readLine()while(line!=null)

10、line=data.readLine(),2.2 使用URL,public boolean action(Event evt,Object arg)try String line;String str=textfield.getText();url=new URL(str);data=new DataInputStream(url.openStream();while(line=data.readLine()!=null)textarea.appendText(line);data.close();catch(MalformedURLException me)System.out.printl

11、n(Error URL);catch(IOException ie)System.out.println(Error IO);return true;,3、URL连接,URL双向通信(URLConection)URLConnection是一个一http为中心的类 1.建立连接 URL url=new URL(“http:/URLConnection con=url.openConnection();2.向服务器端送数据 PrintStream outStream=new PrintStream(con.getOutputStream();outStream.println(string_dat

12、a);,3、URL连接,3.从服务器读数据 DataInputStream inStream=new DataInputStream(con.getInputStream();inStream.readLine();,客户端,java程序,DataOutputStream,DataInputStream,CGI程序,STDIN,STDOUT,服务器,(排序 sort.cgi),connectiuon,getchar(),putchar(),3、URL连接,URLConnection同时支持get和post两种机制一般的格式.缺省情况下为post method方式URL和URLConnectio

13、n的区别在于前者代表一个资源的位置,后者代表一种连接下面的例子中Java程序访问cgi程序,并传给它10个数据,cgi程序胡接收后,排序,并传送回来.这个例子演示了连接的建立、数据流的建立、java如何发数据、如何接收数据、cgi程序如何发送和接收,import java.io.*;import.*;public class test_cgipublic static void main(String args)throws Exception URL url=new URL(http:/URLConnection connection=url.openConnection();connect

14、ion.setDoOutput(true);PrintStream out=new PrintStream(connection.getOutputStream();out.println(0123456789);out.close();,DataInputStream in=new DataInputStream(connection.getInputStream();String inputLine;while(inputLine=in.readLine()!=null)System.out.println(inputLine);System.in.read();in.close();,你

15、是第个来访者,4、访问WWW,起始页上的计数器及WWW程序(script),4、访问WWW,4、访问cgi,cgi(公共网关)程序可以用任何一种变成语言来写.cgi将web与外部程序连接起来(数据库查询等)cgi程序要放在指定的目录下cgi-bin目录.cgi通常以GET或POST接收数据,4、访问cgi,从小应用中运行CGI程序(GET)Socket runcgi=new Socket(“”,80);OutputStream os=runcgi.getOutputStream();PrintStream ps=new PringtStream(os);ps.println(“GET/cgi-

16、bin/testcgi?arg1=val1,8.3 访问cgi,import java.io.*;import.*;public class test_cgi public static void main(String args)throws Exception URL url=new URL(http:/BIN/test_2.cgi?012345678);URLConnection connection=url.openConnection();#include stdio.h”main()char*Query_String;Query_String=getenv(QUERY_STRING

17、);/*treatment*/,4、访问cgi,post方法通过标准输出向cgi传送参数(适合参数较多的情况)用post方法要有数据输出流,Socket runcgi=new Socket(“”,80);/建立socket连接DataOutputStream ds=runcgi.getOutputStream();/建立输入流ds.println(“POST/cgi-bin/guestbook.pl”);ds.println(“Content-type:plain/text”);/通知发送的数据类型/通知发送的数据长度String data=“Hello world”ds.println(“C

18、ontent-length”+data.length+”n”);/发送数据ds.println(data);,5、Socket,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。在传统的UNIX环境下可以操作TCP/IP协议的接口不止Socket一个,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络

19、编程。说Socket编程是低层次网络编程并不等于它功能不强大,恰恰相反,正因为层次低,Socket编程比基于URL的网络编程提供了更强大的功能和更灵活的控制,但是却要更复杂一些。由于Java本身的特殊性,Socket编程在Java中已经是层次最低的网络编程接口。,5、Socket,在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket实例.在客户端通过规定一个主机和端口号创建一个 socket实例,连到服务器上.ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求Socket类和ServerSocket是基于TCP协议的,TCP协议提供64个端

20、口,256以内位保留端口.,5、Socket,在本地机器上测试网络程序用回送地址Socket socket=new Socket(“127.0.0.1”,2525);如果网络的一端已经关闭,另一端读到null.建立socket连接后,还应该建立输入输出数据流.,5、Socket,5、Socket,下面的例子演示一个简单的服务器与客户的交互,即服务器等待,客户访问,相互通一次信息.,8.5 Socket,.8.5 Socket,创建服务器(端口号),定义数据成员,服务器等待网络连接,建立socket流,读客户 端信息,向用户发出一个字符串,创建Socket实例,定义数据成员,建立socket流,

21、读socket流(接收并显示),送用户名给服务器,关闭流,waiting for user,127.0.0.1 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User:java,Login successful,8.5 Socket,例:显示服务器与客户机间的通信(服务器端),PrintStream ps=null;DataInputStream dis=null;String username;ServerSocket serverSocket=null;Socket clientSocket=null;,try se

22、rverSocket=new ServerSocket(1111);catch(IOException e)System.out.println(“Error”+e);System.exit(1);,try clientSocket=serverSocket.accept();catch(IOException e)System.out.println(Accept failed.);System.exit(1);,创建服务器(端口号),定义数据成员,服务器等待网络连接,.,ps=new PrintStream(clientSocket.getOutputStream();dis=new Da

23、taInputStream(clientSocket.getInputStream();,建立socket流,向客户发出登录要求,ps.println(login:);ps.flush();,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.pr

24、intln(Username:+username);,创建Socket实例,PrintStream output;DataInputStream input;String string;Socket socket=null;,定义数据成员,trysocket=new Socket(127.0.0.1,1111);catch(IOException e)System.out.println(Error”+e);return;,input=new DataInputStream(socket.getInputStream();output=new PrintStream(socket.getOut

25、putStream();,建立socket流,.,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.out.print(Logging

26、off.);,读服务器反馈,.8.5 Socket,.8.5 Socket,创建服务器(端口号),定义数据成员,服务器等待网络连接,建立socket流,读客户 端信息,向用户发送字符串,创建Socket实例,定义数据成员,建立socket流,读socket流(看到提示),送用户名给服务器,关闭流,waiting for user,127.0.0.1 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User:java,Login successful,5、Socket支持多客户,一种解决方案:一台计算机上一次启动多个服务器程

27、序,只要端口号不同.,5、Socket支持多客户,第二种方案:,Server,client1,client2,serverthread,serverthread,将服务器写成多线程的,不同的线程为不同的客户服务.main()只负责循环等待线程负责网络连接,接收客户输入的信息,5、Socket,客户1,客户2,服务器,线程(),线程2,创建服务器(端口号),定义数据成员,服务器等待网络连接,建立socket流,读客户 端信息,提示用户输入客户名,创建Socket实例,定义数据成员,建立socket流,读socket流(看到提示),送用户名给服务器,关闭流,waiting for user,127

28、.0.0.1 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User:java,Login successful,8.5 Socket,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 clientSo

29、cket=null;System.out.println(waiting for users.);try clientSocket=serverSocket.accept();catch(IOException e)System.out.println(accept failed:+e);new serverThread(clientSocket).start();,8.5 Socket,class serverThread extends Thread DataInputStream input;PrintStream output;String user;Socket clientSock

30、et;serverThread(Socket clientSocket)this.clientSocket=clientSocket;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

31、)break;output.println(user+string);output.flush();catch(Exception e)return;System.out.println(user+has disconnected.);try clientSocket.close();input.close();catch(Exception e)return;,server,Hello 1076,Hello 1071,abc,WAIT GOabc,WAIT GOdef,def,5、Socket,例:通过服务器交换信息(exchangebyserver),.,服务器(1111)acceptso

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

33、cept(),reader.start(),read_net_input,write_net_output(),client(),write.run,write_net_output(),read_net_input(),close_server(),客户端,writer.start(),paint(),socket,getLocalPort(),getInputStream,getOutputStream,服务器,5、Socket,6、Datagram(数据报),TCP/IP传输层由两个并列的协议:TCP,UDP.一般套接字(TCP)提供一个可靠的传输模型作为两个网络端点的字节流,有纠错能力

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

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

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

37、d(packet);socket.close();,6、Datagram,客户端接收包的步骤如下:1.定义数据成员 int port;InetAddress address;DatagramSocket socket;DatagramPacket packet;byte sendBuf=new byte256;2.建立socket socket=new DatagramSocket();,8.7 Datagram,3.向服务器发出请求报文 address=InetAddress.getByName(args0);port=parseInt(args1);packet=new DatagramP

38、acket(sendBuf,256,address,port);socket.send(packet);/*这个包本身带有客户端的信息*/4.客户机等待应答 packet=new DatagramPacket(sendBuf,256);socket.receive(packet);/(如果没有到就一直等待,因此实用程序要/设置时间限度),6、Datagram,5.处理接收到的数据 String received=new String(packet.getData(),0);System.out.println(received);数据报套接字首先是强调发送方和接收方的区别,同时也指出服务器和客户之间的不同:一个客户机必须事先知道服务器的地址和端口,以便进行初始连接一个服务器从它接收到的数据报文中读取客户端的地址和端口.,.,建立数据报socket();,建立一个报文包packet,等待请求报文,建立数据报socket,建立一个请求包,发出请求,获得对方地址,构成信息包,发送出去,创建接收包,等待接收,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号