java(教学0)java-网络编程_第1页
java(教学0)java-网络编程_第2页
java(教学0)java-网络编程_第3页
java(教学0)java-网络编程_第4页
java(教学0)java-网络编程_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

1、整理课件整理课件第10章 网络编程整理课件整理课件HTTP概述 URL URLConnection读写 InetAddres类 Socket 数据报 本章内容本章内容整理课件整理课件HTTP概述概述1.1.统一资源定位器统一资源定位器URLURL URL- URL- Uniform Resource Locator,表示表示InternetInternet上上某一资源的地址。某一资源的地址。 浏览器通过解析给定的浏览器通过解析给定的URLURL可以在网络上查找可以在网络上查找相应的文件或其他资源。相应的文件或其他资源。 整理课件整理课件 2 2URLURL的组成的组成 protocol:/:p

2、ort_number/file_nameprotocol:/:port_number/file_name 其中:其中: 协议名(协议名(protocolprotocol): :指明获取资源所使用的传输协议,指明获取资源所使用的传输协议, 如如httphttp、ftpftp、gophergopher、filefile等。等。 Host_nameHost_name:资源名(:资源名(resourceNameresourceName)所在的主机。)所在的主机。 Port_nubmerPort_nubmer:连接时所使用的通信端口号:连接时所使用的通信端口号 File_nameFile_name:该资

3、源在主机的完整文件名。:该资源在主机的完整文件名。 HTTP概述概述整理课件整理课件例例1:协议名称协议名称主机名主机名例例2:http:/:80/Gamelan/network.html - -协议名协议名:/:/主机名端口号文件名主机名端口号文件名文件文件HTTP概述概述整理课件整理课件 3基于基于TCP/IP编程的两个协议编程的两个协议 目前在Internet上使用最为广泛的协议是TCP/IP协议 1)TCP 是一种面向连接的保证可靠传输的协议。通过是一种面向连接的保证可靠传输的协议。通过TCP协议协议传输,得到的是一个顺序的无差错的数据流。传输,得到的是一个顺序的无差错的数据流。 发送

4、方和接收方在进行数据传输前必须进行连接(成对的两发送方和接收方在进行数据传输前必须进行连接(成对的两个个socket之间必须建立连接)。之间必须建立连接)。HTTP概述概述整理课件整理课件2)UDP UDP是是User Datagram Protocol的简称,是一种无连接的协议,的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地每个数据报都是一个独立的信息,包括完整的源地址或目的地址。址。 它在网络上以任何可能的路径传往目的地,因此能否到达目的它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。地,到达目

5、的地的时间以及内容的正确性都是不能被保证的。 HTTP概述概述整理课件整理课件在在JavaJava语言中,可以使用三种方式实现网络编语言中,可以使用三种方式实现网络编程:程: (1 1)URLURL编程(获取编程(获取URLURL属性信息)属性信息) (2 2)SocketSocket编程(基于编程(基于TCP TCP 的的C/SC/S) (3)Datagram(3)Datagram编程(编程(UDPUDP)HTTP概述概述整理课件整理课件包 -URL类 -URLconnection类 -Socket类 -ServerSocket类 -DatagramPacket类 -DatagramSock

6、et类 -MulticastSocket类TCPTCP实现实现网络通信网络通信UDP实现实现网络通信网络通信HTTP概述概述整理课件整理课件URL本节主要内容:本节主要内容:URLURL构造方法构造方法URLURL类的其他方法类的其他方法URLURL相关的异常相关的异常从从URLURL读取读取WWWWWW网络数据网络数据 整理课件整理课件1 1)public URL (String spec);public URL (String spec); 使用使用URLURL对象的字符串对象的字符串specspec来构造一个来构造一个URLURL对象。对象。例例1 1: URL url=new URL(

7、http:/www. URL url=new URL(http:/www. ) ) 构造方法构造方法整理课件整理课件2) public URL(URL baseurl, String spec); 通过基地址通过基地址URL和表示相对路径的字符串构和表示相对路径的字符串构造一个造一个URL对象。对象。例例2:URL net263=new URL (http:/ URL index263=new URL(net263, index.html) 基地址基地址构造方法构造方法整理课件整理课件3)public URL(String protocol, String host, String file)

8、; 通过协议名、主机名和文件名构造一个通过协议名、主机名和文件名构造一个URL对象。对象。例例3:URL u1=new URL(http, , /pages/G. html); 构造方法构造方法整理课件整理课件4)public URL(String protocol,String host, int port, String file); 通过协议名、主机名、端口号和文件名构造一个通过协议名、主机名、端口号和文件名构造一个URL对象。对象。例例4:URL g1=new URL(http, “, 80, “07/1208/16/3v2007j.html);构造方法构造方法整理课件整理课件URL类

9、的其他方法类的其他方法获取获取URL对象属性的方法对象属性的方法: public String getProtocol(): 获取该获取该URL的协议名的协议名 public String getHost() : 获取该获取该URL的主机名的主机名 public String getPort() : 获取该获取该URL的端口号的端口号 public String getPath() : 获取该获取该URL的文件路径的文件路径整理课件整理课件 public String getFile() : 获取该获取该URL的文件名的文件名 public String getRef() : 获取该获取该UR

10、L在文件中的相对位置在文件中的相对位置 public String getQuery() : 获取该获取该URL的查询名的查询名也可使用下列方法将也可使用下列方法将URLURL对象的内容以字符串对象的内容以字符串的形式来表示:的形式来表示: String toString();String toString(); String toExternalForm(); String toExternalForm();URL类的其他方法类的其他方法整理课件整理课件与与URL相关的异常相关的异常 URL URL类的每个构造方法在类的每个构造方法在URLURL地址残缺或无法地址残缺或无法解释时,都将抛出解

11、释时,都将抛出MalformedURLExceptionMalformedURLException异常。异常。 一般将相关语句放入一般将相关语句放入trycatchtrycatch语句块中。格语句块中。格式如下:式如下: try URL myURL= new URL()catch (MalformedURLException e)/exception handler code here 整理课件整理课件URLURL编程步骤:编程步骤: 1 1)导入包;)导入包; 2 2)创建)创建URLURL对象(对象(URLURL构造方法)构造方法) 3 3)获取)获取URLURL对象属性对象属性 或利用或

12、利用URLURL对象读入数据对象读入数据整理课件整理课件 例例5: URL url1,url2,url3; try url1 = new URL(“file:/D:/image/example.gif”); url2 = new URL(“http:/ url3 = new URL(url2, “test.gif”);catch(MalformedURLException e) DisplayErrorMessage(); .整理课件整理课件例例6 6:获取:获取URLURL对象属性对象属性try /创建创建URL对象对象URL ur1=new URL(http:/ /输出输出URL对象的有关

13、信息对象的有关信息System.out.println(URL对象字符串:对象字符串:+ur1.toString();System.out.println(URL对象文件:对象文件:+ur1.getFile();整理课件整理课件System.out.println(URL对象地址:对象地址:+ur1.getHost();System.out.println(URL对象端口:对象端口:+ur1.getPort();System.out.println(URL对象协议:对象协议:+ur1.getProtocol();catch(MalformedURLException e)System.out.

14、println(错误的错误的URL对象。对象。);整理课件整理课件获取获取URLURL对象属性的运行结果对象属性的运行结果整理课件整理课件从从URL读取读取WWW网络数据网络数据 URL URL类定义了类定义了openStream()openStream()方法用以读取方法用以读取URLURL地址的数据,其定义为地址的数据,其定义为: :public final InputStream openStream() public final InputStream openStream() thorws IOException thorws IOException ;URLJava 程序程序Inp

15、utStream整理课件整理课件例例7:从:从URL中读取数据中读取数据 URL google = new URL(“http:/); BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream(); String inputLine; while(inputLine=in.readLine() != null) System.out.println(inputLine); in.close(); .整理课件整理课件从从URLURL中读取数据的运行结果中读取数据的运行结果整理课件整理课件基于基于U

16、RLConnection的读写的读写1.1.URLConnectionURLConnection类类 URLURL的方法的方法openStream()openStream()只能从网络上只能从网络上读取数据,而不能写。读取数据,而不能写。 URLConnectionURLConnection是封装访问远程网络资是封装访问远程网络资源一般方法类,通过它可以建立与远程服务源一般方法类,通过它可以建立与远程服务器的连接,检查远程资源的一些属性。器的连接,检查远程资源的一些属性。 整理课件整理课件 URL类中的方法类中的方法openConnection()可以对可以对URL指向的网络资源进行指向的网络

17、资源进行读写。读写。 public URLConnetion openConnection(); 作用:尝试连接作用:尝试连接URL指向的网络资源,然后返回封装了操作该连接指向的网络资源,然后返回封装了操作该连接的类的一个实例。的类的一个实例。 基于基于URLConnection的读写的读写整理课件整理课件例例8: try /先创建一个先创建一个URL对象对象url1 URL url1=new URL(http:/); /创建到创建到url1的一个连接对象的一个连接对象con URLConnection con=url1.openConnection(); catch(MalformedURL

18、Exception) catch(IOException) 整理课件整理课件2URLConnetion类中的常用方法类中的常用方法 public InputStream getInputStream(); public OutputStream getOutputStrem(); public URl getURL(); 基于基于URLConnection的读写的读写整理课件整理课件3. URLConnection读读/写编程步骤写编程步骤 1)创建一个)创建一个URL对象对象u1; 2)使用)使用URLConnection类中的类中的openConnection()方法方法创建到创建到URL

19、的一个连接对象的一个连接对象: URLConnection u1.openConnection()成功,返回一个成功,返回一个URLConnection对象对象不成功,抛出不成功,抛出IOException异常异常 3)进行数据的读或写操作)进行数据的读或写操作; 4)关闭流关闭流基于基于URLConnection的读写的读写整理课件整理课件 4从URLConnection读URL资源4URLConnectionURLConnection类的读写渠道类的读写渠道 getInputStream()getInputStream()基于基于URLConnection的读写的读写整理课件整理课件例例9

20、:采用:采用URLConection 从从URL读取数据读取数据 String inputLine; System.out.println(gl.getContentLength(); System.out.println(gl.getDate(); System.out.println(gl.getLastModified(); System.out.println(gl.getURL(); System.out.println(gl.toString();基于基于URLConnection的读写的读写整理课件整理课件URL google = new URL(http:/localhost:

21、8080/examples/jsp/datatreat.jsp); BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream(); String inputLine; while (inputLine = in.readLine() != null) System.out.println(inputLine);in.close();基于基于URLConnection的读写的读写整理课件整理课件从从URLConectionURLConection读取数据的运行结果读取数据的运行结果整理课件整理课件

22、CGICGI程序程序POSTPOST信息信息有动态特性的有动态特性的HTMLHTML网页网页标准输入标准输入标准输出标准输出4.4.对对RLConnectionRLConnection写写setDoOutput(true), getOutputStream( ) 什么情况下有必要向什么情况下有必要向URLURL写信息呢?写信息呢? - -表单(表单(Form)Form)与与CGICGI有交互的网页有交互的网页 - -使用使用POSTPOST方式向方式向CGICGI传送信息传送信息 基于基于URLConnection的读写的读写整理课件整理课件例例10:向一个:向一个RLConnection写写

23、 URL url = new URL(http:/);URLConnection connection = url.openConnection(); connection.setDoOutput(true); PrintWriter out = new PrintWriter ( connection.getOutputStream(); out.println(string); out.close(); 整理课件整理课件InetAddres类类 类表示一个 Internet Protocol (IP) 地址。 应用程序必须使用方法 getLocalHost, getByName, 或 ge

24、tAllByName 来创建新的 InetAddress 实例。 例11: InetAddress ia = new InetAddress (); 整理课件整理课件 其他方法其他方法 1) public byte getAddress() 返回这个返回这个 InetAddress 对象的原始对象的原始 IP 地址。地址。 2) public static InetAddress getAllByName(String) throws UnknownHostException 给定主机名,确定该主机的所有给定主机名,确定该主机的所有 IP 地址。地址。 3) public static Ine

25、tAddress getByName(String host) throws UnknownHostException 给定主机名,确定该主机的所有给定主机名,确定该主机的所有 IP 地址。地址。 4) public String getHostAddress() 返回返回IP 地址串地址串 %d.%d.%d.%dInetAddres类类整理课件整理课件 5) public String getHostName() 返回此地址的全限定主机名。返回此地址的全限定主机名。 6) public static InetAddress getLocalHost() 返回本地主机。返回本地主机。 7) p

26、ublic String toString() 把此把此IP 地址转换为地址转换为 String 类型。类型。 上述上述1)-4)方法均要抛出方法均要抛出UnknownHostException 异常。异常。InetAddres类类整理课件整理课件例例12: InetAddress 获取获取 IP地址地址import .*; public class getip public static void main(String args) throws UnknownHostException InetAddress ad=InetAddress.getByName(localhost);Syst

27、em.out.println(主机名:主机名:+ad.getHostName();System.out.println(主机地址:主机地址: +ad.getHostAddress();System.out.println(ad.getCanonicalHostName();System.out.println(本地地址:本地地址: +ad.getAddress();System.out.println(本地主机名:本地主机名: +ad.getLocalHost();整理课件整理课件 netAddress类获取IP地址 整理课件整理课件socketnSocketSocket是网络程序中最常用的方

28、式,用是网络程序中最常用的方式,用于建立两个不同程序之间通过网络进行通于建立两个不同程序之间通过网络进行通信的信道。信的信道。nJavaJava语言提供了两种语言提供了两种SocketSocket通信方式:通信方式:nTCP SocketTCP SocketnUDP SocketUDP Socket整理课件整理课件网络服务网络服务Mailftpfinger20telnet数据结构数据结构I/O缓冲区缓冲区端口端口2123客户程序客户程序SocketIP,port套接字是套接字是IP与端口的组与端口的组合合,可以分辨在可以分辨在internet上运行的程序上运行的程序整理课件整理课件socket

29、通信一般过程通信一般过程 Socket Socket通常用来实现客户通常用来实现客户/ /服务器程序。服务器程序。为了让客户机知道如何与相应的服务进程建为了让客户机知道如何与相应的服务进程建立通信联系,一般系统为一些常用的服务类立通信联系,一般系统为一些常用的服务类型分配了默认端口号:型分配了默认端口号: 表表1 1 常用服务端口号常用服务端口号 服务类型服务类型 端口号端口号 EchoEcho FTPFTP TELNETTELNET SMTPSMTP FingerFinger HTTPHTTP POP3POP3 7 7 2121 2323 2525 7979 8080 110110 整理课件

30、整理课件 Socket Socket进行进行C/SC/S程序设计的一般连接过程序设计的一般连接过程:程:q ServerServer端监听某个端口是否有连接请求;端监听某个端口是否有连接请求;qClientClient端向端向ServerServer端发出连接请求;端发出连接请求;qServerServer端向端向ClientClient端发回端发回accpetaccpet消息。消息。 这样一个连接就建立起来,这样一个连接就建立起来,ServerServer端和端和ClientClient端都可以通过端都可以通过sendsend、writewrite等方法与等方法与对方通信。对方通信。sock

31、et通信一般过程通信一般过程 整理课件整理课件ServerServerSocket(port #)Socket socket = ServerSocket.accept()接收连接接收连接OutputStreamInputStreamClose SocketClientSocket(host, port #)与服务器建立连接与服务器建立连接OutputStreamInputStreamClose Socketsocket TCP TCP协议协议 SocketSocket通信通信socket通信一般过程通信一般过程 整理课件整理课件 例例13:13:显示服务器与客户机间的通信显示服务器与客户机间

32、的通信( (服务器端服务器端) )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

33、e) System.out.println(Accept failed.); System.exit(1); 创建服务器创建服务器(端口号端口号)定义数据成员定义数据成员服务器等待服务器等待网络连接网络连接整理课件整理课件 SocketSocket编程步骤编程步骤 应用应用SocketSocket进行网络编程,基本结构都是包括进行网络编程,基本结构都是包括下面下面4 4个步骤:个步骤: :(1 1) 创建创建SocketSocket;(2 2) 打开连接到打开连接到SocketSocket的输入的输入/ /出流;出流;(3 3) 按照一定的协议对按照一定的协议对SocketSocket进行读进

34、行读/ /写操写操作;作;(4 4) 关闭关闭SocketSocket。socket通信一般过程通信一般过程 java在包中提供了在包中提供了Socket类,表示客户端创建类,表示客户端创建对象来建立与服务器的连接。对象来建立与服务器的连接。构造方法构造方法 Socket(InetAddress address, int port); Socket(String host, int port); Socket(String host, int port, InetAddress localAddr,int localPort); Socket(InetAddress address,int p

35、ort, InetAddress localaddr,int localPort);例例14:Socket client = new Socket(127.0.01., 80); Socket cc=new Socket(“”,80);2.读读/写方法写方法 1)public InputStream getInputStream() throws IOException 功能:从功能:从 Socket 中获得一个输入流,用于从中获得一个输入流,用于从 Socket 中读数据,抛出中读数据,抛出 I/O 异常。异常。 2)public OutputStream getOutputStream()

36、 throws IOException 功能:从功能:从 Socket 中获得一个输出流,用于从中获得一个输出流,用于从 Socket 中写数据,抛出中写数据,抛出 I/O 异常。异常。 3)public void close(); 关闭流关闭流3基于基于TCP协议的的客户端编程步骤协议的的客户端编程步骤 1)创建一个指向一个服务器固定端口的)创建一个指向一个服务器固定端口的Socket。 例例15:Socket sock=new Socket(“7”,8000); 2)获得输入获得输入/输出流,进行数据的读输出流,进行数据的读/写操作。写操作。 例例16:/获取输入流

37、获取输入流 BufferedReader in =new BufferedReader(new InputStreamReader(socket.getInputStream(); /获取输出流获取输出流 PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter (socket.getOutputStream(),整理课件整理课件 Java 语言为服务器端程序设计提供了 ServerSocket 类。该类允许程序绑定一个端口,等待客户端程序请求,然后根据客户端的请求执行相应操作,并对请求作出响应。 整理

38、课件整理课件1. ServerSocket的构造方法的构造方法 ServerSocket(int port); ServerSocket(int port, int backlog); ServerSocket(int port, int backlog, InetAddress bindAddr);例例17:ServerSocket server = new ServerSocket(4460); ServerSocket sr = new ServerSocket(4460,10); 2 2监听方法监听方法 public Socket accept()public Socket accep

39、t();功能:功能: 等待客户端的连接等待客户端的连接, ,在等待客户请求在等待客户请求的过程中,方法的过程中,方法 accept() accept() 将处于阻塞状将处于阻塞状态(即无限循环状态),直到接收到连态(即无限循环状态),直到接收到连接请求,返回一个用于连接客户端接请求,返回一个用于连接客户端 Socket Socket 的的 Socket Socket 实例。实例。 例例18:ServerSocket server=null; try server=new ServerSocket(4700); /创建一个创建一个ServerSocket在端口在端口4700监听客户请求监听客户请

40、求catch(IOException e) System.out.println(can not listen to :+e); Socket socket=null;try socket=server.accept(); /监听监听catch(IOException e) System.out.println(Error:+e);3基于基于Socket编程服务器端编程步骤编程服务器端编程步骤 1)以某端口号为参数调用)以某端口号为参数调用ServerSocket类类的构造方法,创建一个的构造方法,创建一个ServerSocket对象,服务对象,服务器端程序将在这个端口上监听、等待客户程序发器

41、端程序将在这个端口上监听、等待客户程序发来的请求。如上例。来的请求。如上例。整理课件整理课件2服务程序使用服务程序使用ServerSocket对象的方法对象的方法accept(),等待接收,等待接收某客户端程序发出的连接请求。某客户端程序发出的连接请求。例例19:Socket soc=server.accept(); 通过通过Socket对象可获取客户端的相关信息。对象可获取客户端的相关信息。例例20:clientIp=soc.getInetAddress(); 也可以利用也可以利用Socket类提供的方法类提供的方法 getInputStream()和和getOutputStream() 来

42、创建输入来创建输入/输出流。输出流。例例21: InputStream is=soc.getInputStream(); OutputStream os=soc.getOutputStream();3输入输入/输出输出 程序对程序对socket的输入的输入/输出流进行读输出流进行读/写操作都和对写操作都和对普通的输入普通的输入/输出流进行读输出流进行读/写基本一样。但是需要在这写基本一样。但是需要在这两个流对象的基础上建立易于操作的数据流如两个流对象的基础上建立易于操作的数据流如DataInputStream、DataOutputStream或或PrintStream。例例22:DataInp

43、utStream in=new DataInputStream(is);DataOutputStream out=new DataOutputStream(os);PrintStream pout=new PrintStream(os);整理课件整理课件另外为了便于输出字符或汉字,可以使用下列输出另外为了便于输出字符或汉字,可以使用下列输出/输入输入流:流: BufferedReader in=new BufferedReader( new InputStreamReader(is);BufferedWriter out=new BufferedWriter( new OutputStremW

44、riter(os);PrintWriter pout=new PrintWriter(new BufferedWriter(new OutputStreamWriter(os),true);Socket应用应用 例例23:基于连接的:基于连接的Client/Server程序程序端程序端程序import .*;import java.io.*;public class JabberClient public static void main(String args) throws IOException InetAddress addr = InetAddress.getByName(null)

45、; System.out.println(addr = + addr); BufferedReader fin=new BufferedReader(new InputStreamReader(System.in); Socket socket = new Socket(addr, 8080); try System.out.println(socket = + socket); BufferedReader in =new BufferedReader(new InputStreamReader(socket.getInputStream(); PrintWriter out =new Pr

46、intWriter( new BufferedWriter(new OutputStreamWriter( socket.getOutputStream(),true);Socket应用应用 while(true) String str =fin.readLine();if (str.equals(exit) out.println(exit);break;else out.println(str); String s=in.readLine();System.out.println(server response:+s); Socket应用应用 /关闭连接关闭连接 finally Syste

47、m.out.println(closing.);socket.close(); Socket应用应用 2.2.服务器端程序服务器端程序public class JabberServer public static void main(String args) throws IOException ServerSocket s = new ServerSocket(8080);Socket socket;System.out.println(Started: + s);try socket = s.accept(); try System.out.println(Connection accep

48、ted: + socket); BufferedReader in =new BufferedReader( new InputStreamReader(socket.getInputStream(); PrintWriter out =new PrintWriter( new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true);2.2.服务器端程序服务器端程序while (true) String str = in.readLine(); if (str.equals(exit)break; System.

49、out.println(Echoing: + str); out.println(server received +str); finally System.out.println(closing.);socket.close(); finally s.close(); 2.2.服务器端程序服务器端程序客户/服务器通信整理课件整理课件整理课件整理课件例24:多线程服务实现 基本方法:基本方法: 在服务器程序里创建单个在服务器程序里创建单个ServerSocketServerSocket对象,并调用对象,并调用accept()accept()方法来等候一个新连接。一旦调用方法来等候一个新连接。一

50、旦调用accept()accept()方法成方法成功,就会获得一个功,就会获得一个socketsocket对象,并用它新建一个线程,令其对象,并用它新建一个线程,令其只为那个特定的客户服务。然后再调用只为那个特定的客户服务。然后再调用acceptaccept方法,等候下方法,等候下一个新的连接请求。一个新的连接请求。整理课件整理课件多线程服务器程序:多线程服务器程序:import java.io.*;import .*; public class MultiTalkServer /静态成员变量,记录当前客户的个数静态成员变量,记录当前客户的个数 static int clientnum=0;

51、public static void main(String args) throws IOException ServerSocket serverSocket=null; boolean listening=true; try serverSocket=new ServerSocket(4700); /创建一个创建一个ServerSocket在端口在端口4700监听客户请求监听客户请求catch(IOException e)整理课件整理课件 System.out.println(Could not listen on port:4700.); /出错,打印出错信息出错,打印出错信息 Sys

52、tem.exit(-1); /退出退出 while(listening) /永远循环监听永远循环监听 new ServerThread(serverSocket.accept(),clientnum).start();/监听到客户请求,根据得到的监听到客户请求,根据得到的Socket对象和客户计数创建服务对象和客户计数创建服务线程,并启动之线程,并启动之clientnum+; /增加客户计数增加客户计数serverSocket.close(); /关闭关闭ServerSocket整理课件整理课件线程程序:public class ServerThread extends Thread Sock

53、et socket=null; /保存与本线程相关的保存与本线程相关的Socket对象对象 int clientnum; /保存本进程的客户计数保存本进程的客户计数 public ServerThread(Socket socket,int num) /构造函数构造函数 this.socket=socket; /初始化初始化socket变量变量 clientnum=num+1; /初始化初始化clientnum变量变量 public void run() /线程主体线程主体try String line; BufferedReader is=new BufferedReader(new Inp

54、utStreamReader(socket.getInputStream();/由由Socket对象得到输入流,并构造相应的对象得到输入流,并构造相应的BufferedReader对象对象整理课件整理课件 PrintWriter os=new PrintWriter(socket.getOutputStream(); /由由Socket对象得到输出流,并构造对象得到输出流,并构造PrintWriter对象对象 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); /由系统标准输入设备构造由系统标准输入设备

55、构造BufferedReader对象对象 System.out.println(Client:+ clientnum +is.readLine(); /在标准输出上打印从客户端读入的字符串在标准输出上打印从客户端读入的字符串 line=sin.readLine(); /从标准输入读入一字符串从标准输入读入一字符串while(!line.equals(bye) /如果该字符串为如果该字符串为 bye,则停止循环,则停止循环 os.println(line); /向客户端输出该字符串向客户端输出该字符串 os.flush(); /刷新输出流,使刷新输出流,使Client马上收到该字符串马上收到该字

56、符串整理课件整理课件System.out.println(Server:+line); /在系统标准输出上打印该字符串在系统标准输出上打印该字符串 System.out.println(Client:+ clientnum +is.readLine(); /从从Client读入一字符串,并打印到标准输出上读入一字符串,并打印到标准输出上line=sin.readLine(); /从系统标准输入读入一字符串从系统标准输入读入一字符串 /继续循环继续循环os.close(); /关闭关闭Socket输出流输出流is.close(); /关闭关闭Socket输入流输入流socket.close();

57、 /关闭关闭Socket/server.close(); /关闭关闭ServerSocketcatch(Exception e)System.out.println(Error:+e); /出错,打印出错信息出错,打印出错信息整理课件整理课件2.客户端程序 try Socket socket=new Socket(,4700); BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); PrintWriter os=new PrintWriter(socket.getOutputStream

58、(); BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream(); String readline;readline=sin.readLine(); /从系统标准输入读入一字符串从系统标准输入读入一字符串整理课件整理课件while(!readline.equals(bye) os.println(readline); os.flush(); System.out.println(Client:+readline); System.out.println(Server:+is.readLi

59、ne(); readline=sin.readLine(); os.close(); /关闭关闭Socket输出流输出流is.close(); /关闭关闭Socket输入流输入流socket.close(); /关闭关闭Socketcatch(Exception e) System.out.println(Error+e); /出错,则打印出错信息出错,则打印出错信息整理课件整理课件 图12-5 多线程服务实现整理课件整理课件数据报数据报 UDP 编程主要有以下几个步骤: (1)创建包括有目的地址的数据报。 (2)创建一个 Socket ,用于发送或接收数据报。 (3)发送数据报。 (4)等待

60、服务器响应。 (5)从响应数据报中抽取信息并显示。Java 提供的有关 UDP 编程的类有 DatagramPacket 类和 DatagramSocket 类。 整理课件整理课件DatagramPacket DatagramPacket 类表示一个数据报,有两个作用: 1)在发送 UDP 数据之前,需要用 DatagramPacket 类封装一个数据报,可以包括发送的目的地址和端口号; 2)当接收到一个 UDP 数据报后,需要用 DatagramPacket 类读取数据报中的各种信息。整理课件整理课件1.1.构造方法构造方法 1 1) public DatagramPacket(bytebu

温馨提示

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

评论

0/150

提交评论