版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java程序设计程序设计第第1414章章 网络编程网络编程Java程序设计程序设计本章主要内容:本章主要内容: HTTPHTTP概述概述 URLURL URLConnection URLConnection读写读写 InetAddres类类 SocketSocket 数据报数据报 Java程序设计程序设计1.1.统一资源定位器统一资源定位器URLURL URL- URL- Uniform Resource Locator,表示表示InternetInternet上某一资源的地址。上某一资源的地址。 浏览器通过解析给定的浏览器通过解析给定的URLURL可以在网络上查找可以在网络上查找相应的文件或
2、其他资源。相应的文件或其他资源。 Java程序设计程序设计u2 2URLURL的组成的组成u protocol:/:port_number/file_nameprotocol:/:port_number/file_name u其中:其中:u协议名(协议名(protocolprotocol): :指明获取资源所使用的传输协议,指明获取资源所使用的传输协议, 如如httphttp、ftpftp、gophergopher、filefile等。等。u Host_nameHost_name:资源名(:资源名(resourceNameresourceName)所在的主机。)所在的主机。 Port_nubm
3、erPort_nubmer:连接时所使用的通信端口号:连接时所使用的通信端口号u File_nameFile_name:该资源在主机的完整文件名。:该资源在主机的完整文件名。 Java程序设计程序设计例例1:http:/ - -协议名协议名:/:/主机名端口号文件名主机名端口号文件名文件文件Java程序设计程序设计u3基于基于TCP/IP编程的两个协议编程的两个协议u目前在Internet上使用最为广泛的协议是TCP/IP协议 1)TCPu 是一种面向连接的保证可靠传输的协议。通过是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。协议传输,得到的是一个顺
4、序的无差错的数据流。u 发送方和接收方在进行数据传输前必须进行连接发送方和接收方在进行数据传输前必须进行连接(成对的两个(成对的两个socket之间必须建立连接)。之间必须建立连接)。Java程序设计程序设计u2)UDPuUDP是是User Datagram Protocol的简称,是一种无连的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址。的源地址或目的地址。u 它在网络上以任何可能的路径传往目的地,因此能否到它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不达目
5、的地,到达目的地的时间以及内容的正确性都是不能被保证的。能被保证的。 Java程序设计程序设计u在在JavaJava语言中,可以使用三种方式实现网络编语言中,可以使用三种方式实现网络编程:程: (1 1)URLURL编程(获取编程(获取URLURL属性信息)属性信息) (2 2)SocketSocket编程(基于编程(基于TCP TCP 的的C/SC/S) (3)Datagram(3)Datagram编程(编程(UDPUDP)Java程序设计程序设计包 -URL类 -URLconnection类 -Socket类 -ServerSocket类 -DatagramPacket类 -Datagra
6、mSocket类 -MulticastSocket类TCPTCP实现实现网络通信网络通信UDP实现实现网络通信网络通信Java程序设计程序设计14.2 URL本节主要内容:本节主要内容:URLURL构造方法构造方法URLURL类的其他方法类的其他方法URLURL相关的异常相关的异常从从URLURL读取读取WWWWWW网络数据网络数据 Java程序设计程序设计1 1)public URL (String spec);public URL (String spec); 使用使用URLURL对象的字符串对象的字符串specspec来构造一个来构造一个URLURL对象。对象。例例1 1: URL ur
7、l=new URL(httpURL url=new URL(http:/www. :/www. ) ) 14.2.1 URL14.2.1 URL构造方法构造方法Java程序设计程序设计2) public URL(URL baseurl, String spec); 通过基地址通过基地址URL和表示相对路径的字符串构和表示相对路径的字符串构造一个造一个URL对象。对象。例例2:URL net263=new URL (http:/ URL index263=new URL(net263, index.html) 基地址基地址Java程序设计程序设计3)public URL(String proto
8、col, String host, String file); 通过协议名、主机名和文件名构造一个通过协议名、主机名和文件名构造一个URL对象。对象。例例3:URL u1=new URL(http, , /pages/G. html); Java程序设计程序设计4)public URL(String protocol,String host, int port, String file); 通过协议名、主机名、端口号和文件名构造一个通过协议名、主机名、端口号和文件名构造一个URL对象。对象。例例4:URL g1=new URL(http, “, 80, “07/1208/16/3v2007j.
9、html);Java程序设计程序设计14.2.2 URL14.2.2 URL类的其他方法类的其他方法获取获取URL对象属性的方法对象属性的方法: public String getProtocol(): 获取该获取该URL的协议名的协议名 public String getHost() : 获取该获取该URL的主机名的主机名 public String getPort() : 获取该获取该URL的端口号的端口号 public String getPath() : 获取该获取该URL的文件路径的文件路径Java程序设计程序设计 public String getFile() : 获取该获取该UR
10、L的文件名的文件名 public String getRef() : 获取该获取该URL在文件中的相对位置在文件中的相对位置 public String getQuery() : 获取该获取该URL的查询名的查询名也可使用下列方法将也可使用下列方法将URLURL对象的内容以字符串对象的内容以字符串的形式来表示:的形式来表示: String toStringString toString();(); String toExternalForm String toExternalForm();();Java程序设计程序设计14.2.3 14.2.3 与与URLURL相关的异常相关的异常 URL U
11、RL类的每个构造方法在类的每个构造方法在URLURL地址残缺或无法解地址残缺或无法解释时,都将抛出释时,都将抛出MalformedURLExceptionMalformedURLException异常异常。 一一般将相关语句放入般将相关语句放入trycatchtrycatch语句块中。格式如语句块中。格式如下:下: try URL myURL= new URL()catch (MalformedURLException e)/exception handler code here Java程序设计程序设计URLURL编程步骤:编程步骤: 1 1)导入)导入包;包; 2 2)创建)创建URLUR
12、L对象(对象(URLURL构造方法)构造方法) 3 3)获取)获取URLURL对象属性对象属性 或利用或利用URLURL对象读入数据对象读入数据Java程序设计程序设计 例例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(); .Java程序设计程序设计例例6 6:获取:获取URLURL
13、对象属性对象属性try /创建创建URL对象对象URL ur1=new URL(http:/ /输出输出URL对象的有关信息对象的有关信息System.out.println(URL对象字符串:对象字符串:+ur1.toString();System.out.println(URL对象文件:对象文件:+ur1.getFile();Java程序设计程序设计System.out.println(URL对象地址:对象地址:+ur1.getHost();System.out.println(URL对象端口:对象端口:+ur1.getPort();System.out.println(URL对象协议:对
14、象协议:+ur1.getProtocol();catch(MalformedURLException e)System.out.println(错误的错误的URL对象。对象。);Java程序设计程序设计geturl.javageturl.java 图图14.1 14.1 获取获取URLURL对象属性的运行结果对象属性的运行结果Java程序设计程序设计14.2.4 14.2.4 从从URLURL读取读取WWWWWW网络数据网络数据 URL URL类定义了类定义了openStreamopenStream()()方法用以读取方法用以读取URLURL地址的数据,其定义为地址的数据,其定义为: :pub
15、lic final InputStream openStreampublic final InputStream openStream() () thorws IOException thorws IOException ;URLJava 程序程序InputStreamJava程序设计程序设计例例7:从:从URL中读取数据中读取数据 URL google = new URL(“http:/); BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream(); String inputLine; w
16、hile(inputLine=in.readLine() != null) System.out.println(inputLine); in.close(); .Java程序设计程序设计图图14.2 14.2 从从URLURL中读取数据的运行结果中读取数据的运行结果URLReader.javaURLReader.javaJava程序设计程序设计14.3 14.3 基于基于URLConnectionURLConnection的读写的读写1.URLConnection1.URLConnection类类 URLURL的方法的方法openStreamopenStream() ()只能从网络上只能从网
17、络上读取数据,而不能写。读取数据,而不能写。 URLConnectionURLConnection是封装访问远程网络资是封装访问远程网络资源一般方法类,通过它可以建立与远程服务源一般方法类,通过它可以建立与远程服务器的连接,检查远程资源的一些属性。器的连接,检查远程资源的一些属性。 Java程序设计程序设计uURL类中的方法类中的方法openConnection()可以对可以对URL指向的网络指向的网络资源进行读写。资源进行读写。upublic URLConnetion openConnection();u作用:尝试连接作用:尝试连接URL指向的网络资源,然后返回封装了操作指向的网络资源,然后
18、返回封装了操作该连接的类该连接的类.URLConnection的一个实例。的一个实例。 Java程序设计程序设计例例8: try /先创建一个先创建一个URL对象对象url1 URL url1=new URL(http:/); /创建到创建到url1的一个连接对象的一个连接对象con URLConnection con=url1.openConnection(); catch(MalformedURLException) catch(IOException) Java程序设计程序设计2URLConnetion类中的常用方法类中的常用方法 u public InputStream getInpu
19、tStream();u public OutputStream getOutputStrem();u public URl getURL(); Java程序设计程序设计3. URLConnection读读/写编程步骤写编程步骤 1)创建一个)创建一个URL对象对象u1; 2)使用)使用URLConnection类中的类中的openConnection()方法方法创建到创建到URL的一个连接对象的一个连接对象: URLConnection u1.openConnection()成功,返回一个成功,返回一个URLConnection对象对象不成功,抛出不成功,抛出IOException异常异常 3
20、)进行数据的读或写操作)进行数据的读或写操作; 4)关闭流关闭流Java程序设计程序设计u4从URLConnection读URL资源4URLConnectionURLConnection类的读写渠道类的读写渠道 getInputStreamgetInputStream()()Java程序设计程序设计例例9:采用:采用URLConection 从从URL读取数据读取数据 String inputLine; System.out.println(gl.getContentLength(); System.out.println(gl.getDate(); System.out.println(gl
21、.getLastModified(); System.out.println(gl.getURL(); System.out.println(gl.toString();Java程序设计程序设计URL google = new URL(http:/localhost:8080/examples/jsp/datatreat.jsp); BufferedReader in = new BufferedReader(new InputStreamReader(google.openStream(); String inputLine; while (inputLine = in.readLine()
22、 != null) System.out.println(inputLine);in.close();Java程序设计程序设计图图12.3 12.3 从从URLConectionURLConection读取数据的运行结果读取数据的运行结果URLConnectionReader.javaURLConnectionReader.javaJava程序设计程序设计CGICGI程序程序POSTPOST信息信息有动态特性的有动态特性的HTMLHTML网页网页标准输入标准输入标准输出标准输出4.4.对对RLConnectionRLConnection写写setDoOutput(true), getOutpu
23、tStream( ) 什么情况下有必要向什么情况下有必要向URLURL写信息呢?写信息呢? - -表单(表单(Form)Form)与与CGICGI有交互的网页有交互的网页 - -使用使用POSTPOST方式向方式向CGICGI传送信息传送信息 Java程序设计程序设计例例10:向一个:向一个RLConnection写写 URL url = new URL(http:/);URLConnection connection = url.openConnection(); connection.setDoOutput(true); PrintWriter out = new PrintWriter
24、( connection.getOutputStream(); out.println(string); out.close(); Java程序设计程序设计14.4 InetAddres14.4 InetAddres类类u类.InetAddress表示一个 Internet Protocol (IP) 地址。 u 应用程序必须使用方法 getLocalHost, getByName, 或 getAllByName 来创建新的 InetAddress 实例。 u例11: InetAddress ia = new InetAddress (); Java程序设计程序设计u其他方法其他方法 1) p
25、ublic byte getAddress() 返回这个返回这个 InetAddress 对象的原始对象的原始 IP 地址。地址。 2) public static InetAddress getAllByName(String) throws UnknownHostException 给定主机名,确定该主机的所有给定主机名,确定该主机的所有 IP 地址。地址。 3) public static InetAddress getByName(String host) throws UnknownHostException 给定主机名,确定该主机的所有给定主机名,确定该主机的所有 IP 地址。地址
26、。 4) public String getHostAddress() 返回返回IP 地址串地址串 %d.%d.%d.%dJava程序设计程序设计 5) public String getHostName() 返回此地址的全限定主机名。返回此地址的全限定主机名。 6) public static InetAddress getLocalHost() 返回本地主机。返回本地主机。 7) public String toString() 把此把此IP 地址转换为地址转换为 String 类型。类型。 上述上述1)-4)方法均要抛出方法均要抛出UnknownHostException 异常。异常。J
27、ava程序设计程序设计例例12: InetAddress 获取获取 IP地址地址import .*; public class getip public static void main(String args) throws UnknownHostException InetAddress ad=InetAddress.getByName(localhost);System.out.println(主机名:主机名:+ad.getHostName();System.out.println(主机地址:主机地址: +ad.getHostAddress();System.out.println(ad
28、.getCanonicalHostName();System.out.println(本地地址:本地地址: +ad.getAddress();System.out.println(本地主机名:本地主机名: +ad.getLocalHost(); Java程序设计程序设计u图14.4 InetAddress类获取IP地址 Java程序设计程序设计14.5 socket14.5 socketnSocketSocket是网络程序中最常用的方式,用是网络程序中最常用的方式,用于建立两个不同程序之间通过网络进行通于建立两个不同程序之间通过网络进行通信的信道。信的信道。nJavaJava语言提供了两种语言
29、提供了两种SocketSocket通信方式:通信方式:nTCP SocketTCP SocketnUDP SocketUDP SocketJava程序设计程序设计网络服务网络服务Mailftpfinger20telnet数据结构数据结构I/O缓冲区缓冲区端口端口2123客户程序客户程序SocketIP,port套接字是套接字是IP与端口的组与端口的组合合,可以分辨在可以分辨在internet上运行的程序上运行的程序Java程序设计程序设计14.4.1 socket14.4.1 socket通信一般过程通信一般过程 SocketSocket通常用来实现客户通常用来实现客户/ /服务器程序服务器程
30、序。为了让客户机知道如何与相应的服务进程建为了让客户机知道如何与相应的服务进程建立通信联系,一般系统为一些常用的服务类立通信联系,一般系统为一些常用的服务类型分配了默认端口号:型分配了默认端口号: 表表1 1 常用服务端口号常用服务端口号 服务类型服务类型 端口号端口号 EchoEcho FTPFTP TELNETTELNET SMTPSMTP FingerFinger HTTPHTTP POP3POP3 7 7 2121 2323 2525 7979 8080 110110 Java程序设计程序设计 Socket Socket进行进行C/SC/S程序设计的一般连接过程序设计的一般连接过程:程
31、:q ServerServer端监听某个端口是否有连接请求;端监听某个端口是否有连接请求;qClientClient端向端向ServerServer端发出连接请求;端发出连接请求;qServerServer端向端向ClientClient端发回端发回accpetaccpet消息。消息。 这样一个连接就建立起来,这样一个连接就建立起来,ServerServer端和端和ClientClient端都可以通过端都可以通过sendsend、writewrite等方法与等方法与对方通信。对方通信。Java程序设计程序设计ServerServerSocket(port #)Socket socket = S
32、erverSocket.accept()接收连接接收连接OutputStreamInputStreamClose SocketClientSocket(host, port #)与服务器建立连接与服务器建立连接OutputStreamInputStreamClose Socketsocket TCP TCP协议协议 SocketSocket通信通信Java程序设计程序设计u例例13:13:显示服务器与客户机间的通信显示服务器与客户机间的通信( (服务器端服务器端) )PrintStream ps=null;DataInputStream dis=null;String username;Ser
33、verSocket 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); 创建服务器创建服务器(端口号端口号)定义数据成员定义
34、数据成员服务器等待服务器等待网络连接网络连接Java程序设计程序设计 SocketSocket编程步骤编程步骤 应用应用SocketSocket进行网络编程,基本结构都是包括进行网络编程,基本结构都是包括下面下面4 4个步骤:个步骤: :(1 1) 创建创建SocketSocket;(2 2) 打开连接到打开连接到SocketSocket的输入的输入/ /出流;出流;(3 3) 按照一定的协议对按照一定的协议对SocketSocket进行读进行读/ /写操写操作;作;(4 4) 关闭关闭SocketSocket。Java程序设计程序设计14.5.2 .socket14.5.2 .socket
35、java在包在包中提供了中提供了Socket类,表示客户类,表示客户端创建对象来建立与服务器的连接。端创建对象来建立与服务器的连接。1.socket构造方法构造方法 Socket(InetAddress address, int port); Socket(String host, int port); Socket(String host, int port, InetAddress localAddr,int localPort); Socket(InetAddress address,int port, InetAddress localaddr,int localPort);Java程
36、序设计程序设计例例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() throws IOException 功能:从功能:从 Socket
37、 中获得一个输出流,用于从中获得一个输出流,用于从 Socket 中写数据,抛出中写数据,抛出 I/O 异常。异常。 3)public void close(); 关闭流关闭流Java程序设计程序设计3基于基于TCP协议的的客户端编程步骤协议的的客户端编程步骤 1)创建一个指向一个服务器固定端口的)创建一个指向一个服务器固定端口的Socket。 例例15:Socket sock=new Socket(“7”,8000); 2)获得输入获得输入/输出流,进行数据的读输出流,进行数据的读/写操作。写操作。 例例16:/获取输入流获取输入流 BufferedReader in
38、 =new BufferedReader(new InputStreamReader(socket.getInputStream(); /获取输出流获取输出流 PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter (socket.getOutputStream(),Java程序设计程序设计 Java 语言为服务器端程序设计提供了 ServerSocket 类。该类允许程序绑定一个端口,等待客户端程序请求,然后根据客户端的请求执行相应操作,并对请求作出响应。 14.5.3 .ServerSocket1
39、4.5.3 .ServerSocketJava程序设计程序设计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); Java程序设计程序设计2 2监听方法监听方法 publ
40、ic Socket accept()public Socket accept();功能:功能: 等待客户端的连接等待客户端的连接, ,在等待客户请求在等待客户请求的过程中,方法的过程中,方法 accept() accept() 将处于阻塞状将处于阻塞状态(即无限循环状态),直到接收到连态(即无限循环状态),直到接收到连接请求,返回一个用于连接客户端接请求,返回一个用于连接客户端 Socket Socket 的的 Socket Socket 实例。实例。 Java程序设计程序设计例例18:ServerSocket server=null; try server=new ServerSocket(
41、4700); /创建一个创建一个ServerSocket在端口在端口4700监听客户请求监听客户请求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);Java程序设计程序设计3基于基于Socket编程服务器端编程步骤编程服务器端编程步骤 1)以某端口号为参数调用)以某端口号为参数调用ServerSocket类类的构造
42、方法,创建一个的构造方法,创建一个ServerSocket对象,服务对象,服务器端程序将在这个端口上监听、等待客户程序发器端程序将在这个端口上监听、等待客户程序发来的请求。如上例。来的请求。如上例。Java程序设计程序设计2服务程序使用服务程序使用ServerSocket对象的方法对象的方法accept(),等,等待接收某客户端程序发出的连接请求。待接收某客户端程序发出的连接请求。例例19:Socket soc=server.accept(); 通过通过Socket对象可获取客户端的相关信息。对象可获取客户端的相关信息。例例20:clientIp=soc.getInetAddress(); 也
43、可以利用也可以利用Socket类提供的方法类提供的方法 getInputStream()和和getOutputStream() 来创建输入来创建输入/输出流。输出流。例例21: InputStream is=soc.getInputStream(); OutputStream os=soc.getOutputStream();Java程序设计程序设计3输入输入/输出输出 程序对程序对socket的输入的输入/输出流进行读输出流进行读/写操作都和对写操作都和对普通的输入普通的输入/输出流进行读输出流进行读/写基本一样。但是需要在写基本一样。但是需要在这两个流对象的基础上建立易于操作的数据流如这两
44、个流对象的基础上建立易于操作的数据流如DataInputStream、DataOutputStream或或PrintStream。例例22:DataInputStream in=new DataInputStream(is);DataOutputStream out=new DataOutputStream(os);PrintStream pout=new PrintStream(os);Java程序设计程序设计另外为了便于输出字符或汉字,可以使用下列输出另外为了便于输出字符或汉字,可以使用下列输出/输入输入流:流: BufferedReader in=new BufferedReader(
45、new InputStreamReader(is);BufferedWriter out=new BufferedWriter( new OutputStremWriter(os);PrintWriter pout=new PrintWriter(new BufferedWriter(new OutputStreamWriter(os),true);Java程序设计程序设计14.5.4 14.5.4 Socket应用应用 例例23:基于连接的:基于连接的Client/Server程序程序1.Client端程序端程序import .*;import java.io.*;public class
46、JabberClient public static void main(String args) throws IOException InetAddress addr = InetAddress.getByName(null); System.out.println(addr = + addr); BufferedReader fin=new BufferedReader(new InputStreamReader(System.in); Socket socket = new Socket(addr, 8080);Java程序设计程序设计 try System.out.println(s
47、ocket = + socket); BufferedReader in =new BufferedReader(new InputStreamReader(socket.getInputStream(); PrintWriter out =new PrintWriter( new BufferedWriter(new OutputStreamWriter( socket.getOutputStream(),true);Java程序设计程序设计while(true) String str =fin.readLine();if (str.equals(exit) out.println(exit
48、);break;else out.println(str); String s=in.readLine();System.out.println(server response:+s); Java程序设计程序设计/关闭连接关闭连接 finally System.out.println(closing.);socket.close(); Java程序设计程序设计2.2.服务器端程序服务器端程序public class JabberServer public static void main(String args) throws IOException ServerSocket s = new
49、ServerSocket(8080);Socket socket;System.out.println(Started: + s);Java程序设计程序设计try socket = s.accept(); try System.out.println(Connection accepted: + socket); BufferedReader in =new BufferedReader( new InputStreamReader(socket.getInputStream(); PrintWriter out =new PrintWriter( new BufferedWriter(new
50、 OutputStreamWriter(socket.getOutputStream(),true);Java程序设计程序设计while (true) String str = in.readLine(); if (str.equals(exit)break; System.out.println(Echoing: + str); out.println(server received +str); finally System.out.println(closing.);socket.close(); finally s.close(); Java程序设计程序设计u图12-4 客户/服务器通
51、信Java程序设计程序设计Java程序设计程序设计例例24:24:多线程服务实现多线程服务实现 基本方法:基本方法: 在服务器程序里创建单个在服务器程序里创建单个ServerSocketServerSocket对象,并调对象,并调用用accept()accept()方法来等候一个新连接。一旦调用方法来等候一个新连接。一旦调用accept()accept()方法成功,就会获得一个方法成功,就会获得一个socketsocket对象,并用它新建一对象,并用它新建一个线程,令其只为那个特定的客户服务。然后再调用个线程,令其只为那个特定的客户服务。然后再调用acceptaccept方法,等候下一个新的连
52、接请求。方法,等候下一个新的连接请求。Java程序设计程序设计多线程服务器程序:多线程服务器程序:import java.io.*;import .*; public class MultiTalkServer /静态成员变量,记录当前客户的个数静态成员变量,记录当前客户的个数 static int clientnum=0; public static void main(String args) throws IOException ServerSocket serverSocket=null; boolean listening=true; try serverSocket=new Ser
53、verSocket(4700); /创建一个创建一个ServerSocket在端口在端口4700监听客户请求监听客户请求catch(IOException e)Java程序设计程序设计 System.out.println(Could not listen on port:4700.); /出错,打印出错信息出错,打印出错信息 System.exit(-1); /退出退出 while(listening) /永远循环监听永远循环监听 new ServerThread(serverSocket.accept(),clientnum).start();/监听到客户请求,根据得到的监听到客户请求,根
54、据得到的Socket对象和客户计数创建服务线对象和客户计数创建服务线程,并启动之程,并启动之clientnum+; /增加客户计数增加客户计数serverSocket.close(); /关闭关闭ServerSocketJava程序设计程序设计线程程序线程程序:public class ServerThread extends Thread Socket socket=null; /保存与本线程相关的保存与本线程相关的Socket对象对象 int clientnum; /保存本进程的客户计数保存本进程的客户计数 public ServerThread(Socket socket,int num
55、) /构造函数构造函数 this.socket=socket; /初始化初始化socket变量变量 clientnum=num+1; /初始化初始化clientnum变量变量 public void run() /线程主体线程主体try String line; BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream();/由由Socket对象得到输入流,并构造相应的对象得到输入流,并构造相应的BufferedReader对象对象Java程序设计程序设计 PrintWriter os=ne
56、w PrintWriter(socket.getOutputStream(); /由由Socket对象得到输出流,并构造对象得到输出流,并构造PrintWriter对象对象 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); /由系统标准输入设备构造由系统标准输入设备构造BufferedReader对象对象 System.out.println(Client:+ clientnum +is.readLine(); /在标准输出上打印从客户端读入的字符串在标准输出上打印从客户端读入的字符串 line=si
57、n.readLine(); /从标准输入读入一字符串从标准输入读入一字符串while(!line.equals(bye) /如果该字符串为如果该字符串为 bye,则停止循环,则停止循环 os.println(line); /向客户端输出该字符串向客户端输出该字符串 os.flush(); /刷新输出流,使刷新输出流,使Client马上收到该字符串马上收到该字符串Java程序设计程序设计System.out.println(Server:+line); /在系统标准输出上打印该字符串在系统标准输出上打印该字符串 System.out.println(Client:+ clientnum +is.
58、readLine(); /从从Client读入一字符串,并打印到标准输出上读入一字符串,并打印到标准输出上line=sin.readLine(); /从系统标准输入读入一字符串从系统标准输入读入一字符串 /继续循环继续循环os.close(); /关闭关闭Socket输出流输出流is.close(); /关闭关闭Socket输入流输入流socket.close(); /关闭关闭Socket/server.close(); /关闭关闭ServerSocketcatch(Exception e)System.out.println(Error:+e); /出错,打印出错信息出错,打印出错信息Jav
59、a程序设计程序设计2.客户端程序客户端程序 try Socket socket=new Socket(,4700); BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); PrintWriter os=new PrintWriter(socket.getOutputStream(); BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream(); String readline;rea
60、dline=sin.readLine(); /从系统标准输入读入一字符串从系统标准输入读入一字符串Java程序设计程序设计while(!readline.equals(bye) os.println(readline); os.flush(); System.out.println(Client:+readline); System.out.println(Server:+is.readLine(); readline=sin.readLine(); os.close(); /关闭关闭Socket输出流输出流is.close(); /关闭关闭Socket输入流输入流socket.close()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年开封市郊区中小学教师招聘考试备考试题及答案详解
- 2026年宜昌市西陵区中小学教师招聘考试备考试题及答案详解
- 2026年安阳市北关区中小学教师招聘笔试模拟试题及答案详解
- 2026年北海市海城区街道办人员招聘笔试参考试题及答案详解
- 2026年辽宁省街道办人员招聘笔试模拟试题及答案详解
- 2027届宜宾市珙县四年级数学第一学期期末学业水平测试模拟试题含解析
- 2025年厦门市思明区街道办人员招聘考试试题及答案详解
- 2025年抚顺市顺城区中小学教师招聘笔试试题及答案详解
- 2026年云浮市云城区街道办人员招聘考试模拟试题及答案详解
- 2026年北京市宣武区法检系统书记员招聘考试模拟试题及答案详解
- 化疗药物配伍及输注操作标准
- 物业项目成本控制及预算管理方案
- 2024年注册安全工程师考试化工(初级)安全生产实务试题及答案
- 单位食堂食材供应及配送服务(肉类)服务方案投标文件(技术方案)
- 农村企业经营管理课件
- 铝锭联营合同与合作协议
- T/CADBM 3-2018竹木纤维集成墙面
- 《气体中毒急诊救治》课件
- 水利工程土石方施工方案设计
- GB/Z 44071-2024液压传动连接软管总成操作规程
- 烧烤视频拍摄脚本
评论
0/150
提交评论