欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第八讲java与网络编程课件.ppt

    • 资源ID:2111112       资源大小:173.44KB        全文页数:56页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第八讲java与网络编程课件.ppt

    第八讲:java与网络编程,第八讲:java与网络编程,目录,1、Java与internet2、使用InetAddress和URL3、URL连接4、访问WWW资源5、Socket6、数据报,目录1、Java与internet,1、Java与网络,网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。TCP/IP(传输控制协议/网间协议)是internet的主要协议,定义了计算机和外设进行通信所使用的规则(应用层,传输层,网络层,链路层).,1、Java与网络网络编程的目的就是指直接或间接地通过网络协,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,1、Java与网络IP地址:标识计算机等网络设备的网络地址,,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与网络例:获取本机的IP地址,1、Java与网络,Java提供的网络功能有三大类:URL,Socket,Datagram.URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据.Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道.Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上.,1、Java与网络Java提供的网络功能有三大类:URL,2.1、InetAddress类,InetAddress类主要用来区分计算机网络中不同节点,即不同的计算机并对其寻址。,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=InetAddress.getByName(“”);catch(UnknowHostException e)System.out.println(pku);,2.1、InetAddress类下面的例子演示java如何,2.2、使用URL,URL(Uniform Resource Locator)是一致资源定位器的简称,它表示Internet上某一资源的地址。通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。URL是最为直观的一种网络定位方法。使用URL符合人们的语言习惯,容易记忆,所以应用十分广泛。而且在目前使用最为广泛的TCP/IP中对于URL中主机名的解析也是协议的一个标准,即所谓的域名解析服务。,2.2、使用URLURL(Uniform Resource,2.2、使用URL,protocol:/resourceName协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gopher、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:http:/协议名:/主机名http:/协议名:/机器名文件名http:/:80/Gamelan/network.html#BOTTOM 协议名:/机器名端口号文件名内部引用,2.2、使用URLprotocol:/resourceNa,2.2、使用URL,我们可以通过下面的构造方法来初始化一个URL对象:(1)public URL(String spec);通过一个表示URL地址的字符串可以构造一个URL对象。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 file);URL gamelan=new URL(http,80,Pages/Gwork.html);,2.2、使用URL我们可以通过下面的构造方法来初始化一个UR,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 String getPath()获取该URL的路径public String getAuthority()获取该URL的权限信息public String getUserInfo()获得使用者的信息public String getRef()获得该URL的锚,2.2、使用URLpublic String getProt,2.2、使用URL,通过URL读取WWW服务器上的数据将URL位置的数据转成一个数据流,URL url=new(http:/data=new DataInputStream(url.openStream();/*从数据流中读出数据*/String line=data.readLine()while(line!=null)line=data.readLine(),URLJava 程序DataInputStream2.2、使,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.println(Error URL);catch(IOException ie)System.out.println(Error IO);return true;,2.2 使用URLpublic boolean action,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_data);,3、URL连接URL双向通信(URLConection),3、URL连接,3.从服务器读数据 DataInputStream inStream=new DataInputStream(con.getInputStream();inStream.readLine();,客户端,java程序,DataOutputStream,DataInputStream,CGI程序,STDIN,STDOUT,服务器,(排序 sort.cgi),connectiuon,getchar(),putchar(),3、URL连接3.从服务器读数据客户端java程序Data,3、URL连接,URLConnection同时支持get和post两种机制一般的格式.缺省情况下为post method方式URL和URLConnection的区别在于前者代表一个资源的位置,后者代表一种连接下面的例子中Java程序访问cgi程序,并传给它10个数据,cgi程序胡接收后,排序,并传送回来.这个例子演示了连接的建立、数据流的建立、java如何发数据、如何接收数据、cgi程序如何发送和接收,3、URL连接URLConnection同时支持get和po,import java.io.*;import.*;public class test_cgipublic static void main(String args)throws Exception URL url=new URL(http:/URLConnection connection=url.openConnection();connection.setDoOutput(true);PrintStream out=new PrintStream(connection.getOutputStream();out.println(0123456789);out.close();,import java.io.*;import java.,DataInputStream in=new DataInputStream(connection.getInputStream();String inputLine;while(inputLine=in.readLine()!=null)System.out.println(inputLine);System.in.read();in.close();,DataInputStream in=new,你是第个来访者,4、访问WWW,起始页上的计数器及WWW程序(script),欢迎来访,你是第,4、访问WWW,4、访问WWWform action=/scripts/,4、访问cgi,cgi(公共网关)程序可以用任何一种变成语言来写.cgi将web与外部程序连接起来(数据库查询等)cgi程序要放在指定的目录下cgi-bin目录.cgi通常以GET或POST接收数据,4、访问cgicgi(公共网关)程序可以用任何一种变成语言来,4、访问cgi,从小应用中运行CGI程序(GET)Socket runcgi=new Socket(“”,80);OutputStream os=runcgi.getOutputStream();PrintStream ps=new PringtStream(os);ps.println(“GET/cgi-bin/testcgi?arg1=val1,4、访问cgi从小应用中运行CGI程序(GET),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);/*treatment*/,8.3 访问cgiimport java.io.*;imp,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(“Content-length”+data.length+”n”);/发送数据ds.println(data);,4、访问cgipost方法通过标准输出向cgi传送参数(适合,5、Socket,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。在传统的UNIX环境下可以操作TCP/IP协议的接口不止Socket一个,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。说Socket编程是低层次网络编程并不等于它功能不强大,恰恰相反,正因为层次低,Socket编程比基于URL的网络编程提供了更强大的功能和更灵活的控制,但是却要更复杂一些。由于Java本身的特殊性,Socket编程在Java中已经是层次最低的网络编程接口。,5、Socket网络上的两个程序通过一个双向的通讯连接实现,5、Socket,在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket实例.在客户端通过规定一个主机和端口号创建一个 socket实例,连到服务器上.ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求Socket类和ServerSocket是基于TCP协议的,TCP协议提供64个端口,256以内位保留端口.,5、Socket在服务器端通过指定一个用来等待的连接的端口,5、Socket,在本地机器上测试网络程序用回送地址Socket socket=new Socket(“127.0.0.1”,2525);如果网络的一端已经关闭,另一端读到null.建立socket连接后,还应该建立输入输出数据流.,5、Socket在本地机器上测试网络程序用回送地址Sock,5、Socket,5、SocketServerServerSocket(por,5、Socket,下面的例子演示一个简单的服务器与客户的交互,即服务器等待,客户访问,相互通一次信息.,5、Socket下面的例子演示一个简单的服务器与客户的交互,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,8.5 Socket.8.5 Socket创建服务器(端口,8.5 Socket,例:显示服务器与客户机间的通信(服务器端),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);System.exit(1);,try clientSocket=serverSocket.accept();catch(IOException e)System.out.println(Accept failed.);System.exit(1);,创建服务器(端口号),定义数据成员,服务器等待网络连接,8.5 Socket例:显示服务器与客户机间的通信(服务器端,.,ps=new PrintStream(clientSocket.getOutputStream();dis=new DataInputStream(clientSocket.getInputStream();,建立socket流,向客户发出登录要求,ps.println(login:);ps.flush();,.ps=new PrintStream(clientSock,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);,ps.println(login sucessful);,创建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.getOutputStream();,建立socket流,创建Socket实例PrintStream output;定,.,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 off.);,读服务器反馈,.System.out.println(input.read,.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,.8.5 Socket.8.5 Socket创建服务器(,5、Socket支持多客户,一种解决方案:一台计算机上一次启动多个服务器程序,只要端口号不同.,5、Socket支持多客户一种解决方案:Server1(,5、Socket支持多客户,第二种方案:,Server,client1,client2,serverthread,serverthread,将服务器写成多线程的,不同的线程为不同的客户服务.main()只负责循环等待线程负责网络连接,接收客户输入的信息,5、Socket支持多客户第二种方案:client1cl,5、Socket,客户1,客户2,服务器,线程(),线程2,线程(),线程(),5、Socket客户1客户2服务器线程()线程2线程(,创建服务器(端口号),定义数据成员,服务器等待网络连接,建立socket流,读客户 端信息,提示用户输入客户名,创建Socket实例,定义数据成员,建立socket流,读socket流(看到提示),送用户名给服务器,关闭流,waiting for user,127.0.0.1 1111,1111,login:,connetcting client.,java,提示用户登录成功,读socket流,User:java,Login successful,创建服务器(端口号)定义数据成员服务器等待建立socket流,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 clientSocket=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 Socketpublic static void m,8.5 Socket,class serverThread extends Thread DataInputStream input;PrintStream output;String user;Socket clientSocket;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)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;,8.5 Socketclass serverThread e,server,Hello 1076,Hello 1071,abc,WAIT GOabc,WAIT GOdef,def,5、Socket,例:通过服务器交换信息(exchangebyserver),serverHello 1076Hello 1071abcW,.,服务器(1111)acceptsocket,客户,IP client1,线程,客户,IP client2,线程,服务器一端为了能接收多个客户的信息,它的输入流,输出流都是数组型的.ServerSocket.accept()等待用户连接,一旦连接上,则调用服务程序.服务程序的主要内容是网络的读写,多客户的原因,网络读写的功能用多线程实现,因此将此部分功能单独分离出来,构成线程类,.服务器客IP client1线程客IP client2,5、Socket,client1,client2,serviceRequest,server,ServerSocket,Socket,getOutputStream,getInputStream,reader.run,reader.run,服务器端,accept(),reader.start(),read_net_input,write_net_output(),5、Socketclient1client2serviceR,client(),write.run,write_net_output(),read_net_input(),close_server(),客户端,writer.start(),paint(),socket,getLocalPort(),getInputStream,getOutputStream,服务器,5、Socket,client()write.runwrite_net_out,6、Datagram(数据报),TCP/IP传输层由两个并列的协议:TCP,UDP.一般套接字(TCP)提供一个可靠的传输模型作为两个网络端点的字节流,有纠错能力.UDP没有保持的连接和数据流,数据报是一个网络上发送的独立信息,它的到达,到达时间,以及内容不能得到保证.,socket,server,client,datagram,server,client,6、Datagram(数据报)TCP/IP传输层由两个并,6、Datagram,TCP提供高可靠性服务,适用于一次要传输交换大量报文的情况,信道上传递的包不需要源地址和目的地址UDP提供高效率服务,适用于依次传输交换少量报文的情形(如数据库查询),每个数据包要包含目的地址和端口号.数据报文的使用以包为中心:打包,拆包.J包支持两种不同的在网络上送数据的方法:一般套接字和数据报文套接字.,6、DatagramTCP提供高可靠性服务,适用于一次要传,6、Datagram,发出报文的标准步骤如下:1.定义数据成员 DatagramSocket socket;DatagramPacket packet;InetAddress address;(用来存放接收方的地址)int port;(用来存放接收方的端口号)2.创建数据报文Socket对象try socket=new DatagramSocket(1111);catch(.SocketException e)socket 绑定到一个本地的可用端口,等待接收客户的请求.,6、Datagram发出报文的标准步骤如下:,6、Datagram,3.分配并填写数据缓冲区(一个字节类型的数组)byte Buf=new byte256;/存放从客户端接收的请求信息.4.创建一个DatagramPacket packet=new DatagramPacket(buf,256);/用来从socket接收数据,它只有两个参数 5.服务器阻塞 socket.receive(packet);/在客户的请求报道来之前一直等待,6、Datagram3.分配并填写数据缓冲区(一个字节类型,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.send(packet);socket.close();,6、Datagram6.从到来的包中得到地址和端口号In,6、Datagram,客户端接收包的步骤如下:1.定义数据成员 int port;InetAddress address;DatagramSocket socket;DatagramPacket packet;byte sendBuf=new byte256;2.建立socket socket=new DatagramSocket();,6、Datagram客户端接收包的步骤如下:,8.7 Datagram,3.向服务器发出请求报文 address=InetAddress.getByName(args0);port=parseInt(args1);packet=new DatagramPacket(sendBuf,256,address,port);socket.send(packet);/*这个包本身带有客户端的信息*/4.客户机等待应答 packet=new DatagramPacket(sendBuf,256);socket.receive(packet);/(如果没有到就一直等待,因此实用程序要/设置时间限度),8.7 Datagram3.向服务器发出请求报文,6、Datagram,5.处理接收到的数据 String received=new String(packet.getData(),0);System.out.println(received);数据报套接字首先是强调发送方和接收方的区别,同时也指出服务器和客户之间的不同:一个客户机必须事先知道服务器的地址和端口,以便进行初始连接一个服务器从它接收到的数据报文中读取客户端的地址和端口.,6、Datagram5.处理接收到的数据,.,建立数据报socket();,建立一个报文包packet,等待请求报文,建立数据报socket,建立一个请求包,发出请求,获得对方地址,构成信息包,发送出去,创建接收包,等待接收,.建立数据报socket();建立一个报文包packet等待,

    注意事项

    本文(第八讲java与网络编程课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开