JAVA程序设计案例教程-第12章_第1页
JAVA程序设计案例教程-第12章_第2页
JAVA程序设计案例教程-第12章_第3页
JAVA程序设计案例教程-第12章_第4页
JAVA程序设计案例教程-第12章_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、http:/ http:/ HappyChat网络功能应用分析n12.2网络编程基础n12.3 使用URL方式进行网络连接n12.4 基于Socket的通讯n12.5 基于无连接的数据报通讯n12.6 本章小结n12.7 上机实训http:/ u用户登录用户登录用户注册成功后,通过用户注册成功后,通过HappyChat聊天系统提供的登录程序进聊天系统提供的登录程序进行登录,在登录过程中客户端需要指定服务器行登录,在登录过程中客户端需要指定服务器IP地址、端口、用地址、端口、用户名和密码,通过网络传输到服务器以向指定服务器发出用户名户名和密码,通过网络传输到服务器以向指定服务器发出用户名和密码验

2、证的请求和密码验证的请求 http:/ http:/ 客户/服务器模型http:/ u目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议。TCP协议即传输控制协议,是一种面向连接的保证可靠传输的协议;IP协议即网际协议,是一种面向无连接的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流 uUDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的 http:/ URL是最为直观的一种

3、网络定位方法。使用URL符合人们的语言习惯,容易记忆,所以应用十分广泛。而且在目前使用最为广泛的TCP/IP中对于URL中主机名的解析也是协议的一个标准,即所谓的域名解析服务使用URL进行网络编程,不需要对协议本身有太多的了解,功能也比较弱,相对而言是比较简单的 http:/ n在Internet上都是通过IP地址来访问主机,但IP地址不容易记忆,我们通常利用域名来访问Internet上的主机 端口号n网络通信时同一机器上的不同进程的标识。如:80、21、23和25等,其中11024为系统保留的端口号。(1)使用URL进行网络编程(2)使用Socket通信 (3)使用UDP通信 http:/

4、方法名方法名方法功能方法功能String getHostAddress()获取InetAddress所含的IP地址String getHostName()获取InetAddress所含的域名static InetAddress getLocalHost()获取本地机的地址String getByName()通过域名获取IP地址或通过IP地址获取域名getAddress()返回IP地址的字节形式getAllByName()返回指定主机名的IP地址getbyAddress()返回指定字节数组的IP地址形式hastCode()返回InetAddress对象的哈希码toString()返回地址转换成的

5、字符串表12.1 InetAddress类常用方法http:/ .*;public class INetDemo public static void main(String args) new INetDemo().say(); public void say() try InetAddress i = InetAddress.getLocalHost(); System.out.println(i); System.out.println(主机名称为:+i.getHostName(); System.out.println(IP地址为:+i.getHostAddress(); catch(

6、Exception e)e.printStackTrace(); http:/ .URL类和.URLConection类使编程者方便地利用URL在Internet上进行网络通信。URL类和URLConnection类提供给我们一种简便的方法编写网络程序,实现一些较高级的协议访问Internet nURL类封装了使用统一资源定位器访问WWW上的资源的方法。这个类可以生成一个寻址或指向某个资源的对象。URL类对象指向WWW资源(Web页、文本文件、图形文件、声频片段等) http:/ 符号符号含义含义protocol协议,包括http、ftp、gopher、news、telnet等hostname

7、主机名,指定DNS服务器能访问的WWW上的计算机名称,如port端口号,可选,表示所连的端口,只在要覆盖协议的缺省端口时才有用,如果忽略端口号,将连接到协议缺省的端口,例如http协议的缺省端口为80resourcename资源名,是主机上能访问的目录或文件anchor标记,可选,它指定在资源文件中的有特定标记的位置表12.2 URL含义 http:/ URL类构造方法和常用方法方法名方法名方法功能方法功能URL(String url)建立指向url资源的URL对象URL(URL baseURL,String relativeURL)通过URL基地址和相对于该基地址的资源名建立URL对象URL

8、(String protocol,String host,String file)通过给定的协议、主机和文件名建立URL对象URL(String protocol,String host,int port,String file)通过给定协议、主机、端口号和文件名建立URL对象getPort()获得端口号getProtocol()获得协议getHost()获得主机名getFile()获得文件名getRef()获得连接getDefaultPort()获得默认的端口号getUserInfo获得用户信息getContent()不必显式指定寻找的资源类型,就可以取回资源并返回相应的形式。(例如GIF或

9、JPEG图形资源会返回一个Image对象)openStream()打开一个输入流,返回类型是InputStream,这个输入流的起点是URL实体对象的内容所代表的资源位置处,终点则是使用了该URL实体对象及方法openStream()的程序。在输入流建好了之后,我们就可以从输入流中读取数据了,而这些信息数据的实际来源,则是最为输入流起点的网上资源文件http:/ .*;import java.io.*;public class UrlDemopublic static void main(String args) throws ExceptiontryURL url=new URL(http:

10、/);InputStreamReader isr=new InputStreamReader(url.openStream();BufferedReader br=new BufferedReader(isr);String strInfo;http:/ isr.close(); catch(Exception e) System.out.println(e); http:/ u应用程序一般仅在同一类的套接字之间通讯。不过只要底层的通讯协议允许,不同类型的套接字之间也可以通讯。u有两种套接字类型:流套接字和数据报套接字。其中流套接字提供双向的、有序的、无重复并且无记录边界的数据流服务,TCP是

11、一种流套接字协议 http:/ n在套接字通信中客户端的程序使用Socket类建立与服务器套接字连接,即客户向服务器发出连接请求。因此服务器必须建立一个等待接收客户套接字服务器套接字,以响应客户端的请求。服务器端程序使用ServerSocket类建立接收客户套接字的服务器套接字。ServerSocket类的构造方法和常用方法如表12.5所示 n客户端和服务器端通过套接字进行通信时,要进行读写端口和取地址操作。读写端口和取地址的方法表12.6所示 http:/ impl)通过SocketImpl类对象建立未连接的SocketSocket(String host,int port)建立Socket

12、并连接到指定的主机和端口号Socket(InetAddress address,int port)建立Socket并连接到指定的IP和端口号Socket(String host,int port,InetAddress localAddr,int localPort)建立一个约束于给定IP地址和端口的流式Socket并连接到指定的主机和端口Socket(InetAddress address,int port,InetAddress localAddr,int localPort)建立一个约束于给定IP地址和端口的流式Socket并连接到指定的主机和端口Socket(String host,i

13、nt port,boolean stream)建立一个Socket并连接到指定的IP地址和端口号,其通信方式由stream给出Socket(InetAddress address,int port,boolean stream)建立一个Socket并将它连接到指定的IP地址和端口号,其通信方式有stream给出表12.4 Socket类构造方法http:/ port)在本地机上的指定端口(int)处创建服务器套接字,客户使用些端口与服务器通信。如果端口指定为0,那么在本地机上的任何端口处创建服务器套接字。ServerSocket(int port,int backlog)在本地机上的指定端口(

14、int)处创建服务器套接字,第二个参数指出在指定端口处服务器套接字支持的客户连接的最大数ServerSocket(int port,int backlog,InetAddress bindAddr)在指定端口(int)处创建服务器套接字。第三个参数用来创建多个宿主机上服务器套接字。服务器套接字只接收指定IP地址上的客户请求。Socket accept()在服务器套接字监听客户连接并接收它。此后,客户建立与服务器的连接,此方法返回客户的套接字。void close()关闭服务器套接字。String toString()返回作为串的服务器套接字的IP地址和端口号。表12.5 ServerSocke

15、t类构造方法http:/ 读写端口和取地址的方法方法名方法名方法功能方法功能InetAddress getInetAddress()返回该套接口所连接的地址int getPort()返回该套接口所连接的远程端口synchronized void close()关闭套接口InputStream getInputStream()获得从套接口读入数据的输入流OutputStream getOutputStream()获得向套接口进行写操作的输出流http:/ n客户端Socket的工作过程包含以下四个基本的步骤:u创建Socket。根据指定的IP地址或端口号构造Socket类对象。如服务器端响应,则

16、建立客户端到服务器的通信线路。u打开连接到Socket的输入/出流。使用getInputStream()方法获得输入流,使用getOutputStream()方法获得输出流。u按照一定的协议对Socket进行读/写操作。通过输入流读取服务器放入线路的信息(但不能读取自己放入线路的信息),通过输出流将信息写入线程。u关闭Socket。断开客户端到服务器的连接,释放线路 http:/ 图12.4 基于Socket的C/S通信http:/ Server和一个客户的对话【例12-3】基于Socket的单客户端程序/客户端程序import java.awt.*;import java.awt.event

17、.*;import javax.swing.*;import java.io.*;import .*;public class ClientDemopublic static void main(String args)trySocket client=new Socket(,4000);BufferedReader sin=new BufferedReader(new InputStreamReader(System.in);BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputS

18、tream();http:/ os=new PrintWriter(client.getOutputStream();String msg;msg=sin.readLine();while(!msg.equals(bye)os.println(msg);os.flush();System.out.println(I SAY:+msg);System.out.println(Server SAY:+is.readLine();msg=sin.readLine();System.out.println(The Talk End!);os.close();is.close();client.clos

19、e();catch(IOException e)System.out.println(Error:+e);http:/ Server和多个客户的对话【例12-4】基于Socket的多客户端程序/多个客户服务端程序import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import .*;public class ServerToMultiDemostatic int intClient=1;public static void main(String args) throws IOExcep

20、tionServerSocket serversocket=null;tryserversocket=new ServerSocket(4000);System.out.println(Server is starting.);catch(IOException e)http:/ st=new ServerThread(serversocket.accept(),intClient);st.start();intClient+;class ServerThread extends ThreadSocket server;int intCounter;public ServerThread(So

21、cket socket,int num)server=socket;intCounter=num;http:/ void run()tryString msg;BufferedReader sin=new BufferedReader(new InputStreamReader(System.in);BufferedReader is=new BufferedReader(new InputStreamReader(server.getInputStream();PrintWriter os=new PrintWriter(server.getOutputStream();System.out

22、.println(Client +intCounter+:+is.readLine();msg=sin.readLine();while(!msg.equals(bye)os.println(msg);os.flush();System.out.println(I:+msg);http:/ +intCounter+:+is.readLine();msg=sin.readLine();System.out.println(The Talk End!);os.close();is.close();server.close();catch(IOException e)System.out.print

23、ln(Error:+e);http:/ Datagram Protocol,用户数据报协议)。UDP可以发送数据报,但它的开销比TCP少得多。UDP的缺陷是它不保证数据发送的可靠性,数据接收到的顺序可能和发送的顺序不同,甚至还可能完全丢失数据报。程序设计者必须负责整理和验证这些数据和请求重发 n基于UDP通信的基本模式:n(1)将数据打包,形成数据包(类似于将信件装入信封),然后将数据包发往目的地(类似于寄信)。n(2)接收别人发来的数据包(类似于收信),然后查看数据包中的内容(类似于阅读信件内容)。http:/ DatagramPacket u使用DatagramSocket构造一个对象,负

24、责发送数据包。DatagramSocket提供了两种构造方法发送数据包:DatagramSocket()DatagramSocket(int port) n接收数据包u使用DatagramSocket类创建一个对象,使得接收端指定的端口号与发送端指定的端口号一致以等待接收数据包。u调用receive(DatagramPacket pack)接收数据包 http:/ .*;import java.io.*;public class UDPClientDemoprivate DatagramSocket s;private InetAddress hostAddress;private byte

25、buf = new byte1000;private DatagramPacket dp = new DatagramPacket(buf,buf.length);public UDPClientDemo()try s = new DatagramSocket(); hostAddress = InetAddress.getByName(localhost); System.out.println(Client start.); while(true) String strOutMess =; BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in);http:/ try strOutMess = stdin.readLine(); catch(IOException ie) System.err.println(IO error!); if(st

温馨提示

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

评论

0/150

提交评论