欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > PPT文档下载
 

java教程socket网络编程.ppt

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

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

java教程socket网络编程.ppt

第9章,Socket网络编程,SunnyLiuweiliu_china,本课教学内容,客户/服务器模型协议SocketSocket概况IP地址和端口创建Socket输入包创建服务器应用程序用于服务器的类和方法,本课教学内容,创建服务器监听客户请求启动服务器创建网络客户机所需的类和方法创建Socket类的对象从套接字读和写入套接字关闭连接,问题陈述,应用场景需要在Java中开发一个服务器应用程序,其功能说明如下:服务器应该能从客户机的Frame窗口接收用户登录信息。服务器应该能够将用户信息返回给客户。服务器应支持多线程,同时应该能为任何数量的客户机提供服务。服务器运行在端口#1432上。,客户/服务器模型,简介客户/服务器模型是一种内部数据处理和存储与数据显示相分离的应用程序开发结构。客户请求服务器而服务器完成这些请求。这些请求通过网络传到服务器。由于服务器所作的处理对客户是隐藏的。一个服务器可以服务多台客户机。,客户/服务器模型,通信原理客户机与服务器之间使用的大部分通信组件都是基于Socket接口来实现的Socket是两个程序之间进行双向数据传输的网络通信端点,由一个IP地址和一个端口号来标识每个服务器程序在提供服务时都要在一个端口进行,而想使用该服务的客户机也必须连接到该端口。,客户/服务器模型,客户机/服务器工作模式:,协议,定义数据以包的形式从一台机器传到另一台机器。规则负责把打包数据放进包里,传送速度以及重建数据回到其原来形式。这些规则称为网络协议。,协议,TCP协议和UDP协议TCP是TranferControlProtocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。UDP是UserDatagramProtocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。,Socket,Socket概况Socket是基类,支持TCP协议。Socket类提供流I/O方法,使从Socket读出和写进方便。ServerSocket是由因特网服务器程序用于响应客户请求的类。ServerSocket实际上并不完成服务,而是为客户创建Socket对象。通信在创建的对象之间进行。,Socket,Socket类和ServerSocket类的构造方法:Socket(InetAddressaddress,intport);Socket(InetAddressaddress,intport,booleanstream);Socket(Stringhost,intprot);Socket(Stringhost,intprot,booleanstream);Socket(SocketImplimpl)Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)ServerSocket(intport);ServerSocket(intport,intbacklog);ServerSocket(intport,intbacklog,InetAddressbindAddr),Socket,IP地址和端口TCP协议需要两个数据项:IP地址和端口号。每个协议都有缺省的端口号,如果端口号未指定,就使用它,Socket,创建Socket下面是一个典型的创建客户端Socket的代码:,trySocketsocket=newSocket("127.0.0.1",1432);/127.0.0.1是TCP/IP协议中默认的本机地址catch(IOExceptione)System.out.println("Error:"+e);,Socket,输入包使用import语句,为网络输入必要的包。例如:.*;importjava.io.*;,创建服务器应用程序,用于服务器的类和方法要创建服务器,你需要创建ServerSocket对象监听客户请求的特定端口。当它认出有效请求,服务器Socket获得客户创建的Socket对象。用这Socket产生位于服务器和客户机之间的通信。,创建服务器应用程序,ServerSocket类ServerSocket类的构造函数带两个参数:第一个是端口号码;第二个参数表示可连接的最大数。ServerSocket类提供如下方法:监听连接返回地址和本机端口返回表示Socket的串,创建服务器应用程序,创建服务器构造函数的代码给出如下:,tryserver=newServerSocket(1432);/创建一个ServerSocket在端口1432监听客户请求catch(Exceptione)System.out.println("cannotlistento:"+e);/出错,打印出错信息System.out.println("Serverstarted");this.start();/启动线程,创建服务器应用程序,监听客户请求ServerSocket对象通过accept()方法来监听客户的请求,如果接收到客户的请求,则产生一个Socket对象,并继续执行后面的代码;如果没有接收到客户请求,则产生一个错误信息。,创建服务器应用程序,代码,Socketsocket=null;trysocket=server.accept();/使用accept()阻塞等待客户请求,有客户/请求到来则产生一个Socket对象,并继续执行catch(Exceptione)System.out.println("cannotlistento:"+e);/出错,打印出错信息,创建服务器应用程序,服务器的输入和输出流服务器端用到了以下的输入和输出流:BufferedReader对象用来表示从客户端输入到服务器的流PrintWriter对象表示服务器端输出到客户端的流BufferedReader对象表示从系统标准输入设备输入到服务器端的流。,创建服务器应用程序,代码如下:,BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream();/由Socket对象得到输入流,并构造相应的BufferedReader对象PrintWriteros=newPrintWriter(socket.getOutputStream();/由Socket对象得到输出流,并构造PrintWriter对象BufferedReadersin=newBufferedReader(newInputStreamReader(System.in);/由系统标准输入设备构造BufferedReader对象newServer();,创建服务器应用程序,完整的服务器程序服务器程序创建了一个BufferedReader对象(is)和一个PrintStream对象(os)。is使用getInputStream()方法检索客户端的输入;os使用getOutputStream()方法使得服务器可以把输出写到客户端。这样一来,就开始了双向通信。当客户连接到服务器时,服务器在标准输出上打印从客户端读入的字符串,然后由BufferedReader对象sin的readline()方法从标准输入读入一字符串,并发送到客户端程序。当有一方输入”bye”时,通信结束。,创建服务器应用程序,到了结束的时候,服务器中断循环。关闭客户套接字。关闭套接字很重要,如果让连接开着,很快就将耗尽服务器的内存。,创建服务器应用程序,ObjectInputStream类ObjectInputStream类中包含从持久的存储介质中读出类的对象的功能。持久的存储介质可以是磁盘或套接字。这由ObjectInputStream类的readObject()方法来完成。readObject()方法的语法如下:FileInputStreamfp=newFileInputStream(“data.txt”);ObjectInputStreamistream=newObjectInputStream(fp);Datedate=(Date)istream.readObject();,实例分析,解题思路步骤1:选择创建网络服务器应用程序所需的类和方法。步骤2:确定用户定义的类,它们的目的,方法。步骤3:确定用户定义的类中的数据类型和变量。步骤4:确定服务器的IP地址和端口号。步骤5:确定查询参数。步骤6:确定要处理的异常。步骤7:确定异常的出错信息。,任务求解,步骤1:选择创建网络服务器应用程序所需的类和方法创建服务器应用程序需要用到:ServerSocket类的accept()方法;Thread类的start()和run()方法;Socket类的getInputStream()方法;以及ObjectInputStream类的readObject()方法。,任务求解,步骤2:确定用户定义的类,它们的目的,方法用户定义了FrameServer类,用于监听客户请求,包含run()方法;定义了Connection类,用于从客户端检索数据,包含Connection(),run()方法;定义了User类,用于保留登录信息。,任务求解,步骤3:确定用户定义的类中的数据类型和变量用户在FrameServer类中定义了serverSocket一个变量在Connection类中定义了netClient,fromClient,toClient三个变量在User类中定义了name,passwords两个变量。,任务求解,步骤4:确定服务器的IP地址和端口号服务器的IP地址是:127.0.0.1,端口是1432。步骤5:确定提交的参数提交的参数是:name,passwords,任务求解,步骤6:确定要处理的异常NotSerializableException异常当一个对象需要实现Serializable接口时,发生NotSerializableException异常。IOException异常IONotSerializableException异常意味着发生了某类输入/输出异常。所以当调用readObject()方法时,分别处理IOException异常,NotSerializableException异常。当创建Thread对象,调用accept()方法以及调用getInputStream()方法时,处理Exception异常。,任务求解,步骤7:确定异常的出错信息NotSerializableException异常的出错信息是:”读取对象出错”后跟异常对象。IOException(forthread)异常的出错信息是:”不能打开服务器。”后跟异常对象。IOException(foraccept()异常的出错信息是:”没有监听”后跟异常对象。IOException(forgetInputStream()异常的出错信息是:”不能建立双向流管道”后跟异常对象。,任务求解,编写服务器程序,问题陈述,应用场景需要修改UserFrame,使其连接到现有的网络服务器应用程序上,并发送用户信息。用户登录的代码模板如下所示:,importjava.awt.*;importjavax.swing.*;publicclassUserFrameextendsJFrameJPanelpanel;JLabellabelName;JLabellabelPass;JTextFieldtexName;JPasswordFieldtextPass;JButtonbutLogin,butCancel;GridLayoutgl;,问题陈述,publicUserFrame()gl=newGridLayout(2,3);panel=newJPanel();getContentPane().add(panel);panel.setLayout(gl);labelName=newJLabel("用户名");labelPass=newJLabel("密码");texName=newJTextField(20);textPass=newJPasswordField(20);butLogin=newJButton("登录");butCancel=newJButton("取消");panel.add(labelName);panel.add(texName);panel.add(butLogin);panel.add(labelPass);panel.add(textPass);,问题陈述,panel.add(butCancel);publicstaticvoidmain(Stringargs)UserFrame=newUserFrame();,所需的类和方法,创建Socket类对象创建一个套接字客户机的第一步是创建Socket对象。Socket类的构造函数带两个参数IP地址和服务器监听的端口号。例如:Socketsocket=newSocket("127.0.0.1",1432);,所需的类和方法,从套接字读和写入套接字从套接字读和写类似于从文件中读和写。说明两个对象,分别是PrintStream类和BufferedReader类。这些对象将用于从Socket读和写。PrintStreamout=null;/写入套接字BufferedReaderin=null;/从套接字读,所需的类和方法,从套接字读和写入套接字连接PrintStream和BufferedReader对象至socket。例如:PrintStreamout=newPrintWriter(socket.getOutputStream();BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream();Socket类的getInputStream()和getOutputStream()方法使客户能和服务器通信。getInputStream()方法用于从Socket读getOutputStream()方法用于写进Socket。,所需的类和方法,从套接字读和写入套接字为了和标准输入相联系,需要说明另一个BufferedReader类的对象,以致输入客户的数据能被传送至服务器。,BufferedReadersin=newBufferedReader(newInputStreamReader(System.in);Stringreadline;readline=sin.readLine();/从系统标准输入读入一字符串while(!readline.equals("bye"),所需的类和方法,关闭连接下列语句关闭流以及和服务器的连接:os.close();/关闭Socket输出流is.close();/关闭Socket输入流socket.close();/关闭Socket,所需的类和方法,程序示例下列程序实现简单的连接到服务器的Socket客户机,套接字客户机接收用户输入的字符串并允许双向通信。为终止连接,用户必须输入bye。,所需的类和方法,程序代码,importjava.io.*;.*;publicclassTalkClientpublicstaticvoidmain(Stringargs)trySocketsocket=newSocket("127.0.0.1",1001);/向本机的1001端口发出客户请求BufferedReadersin=newBufferedReader(newInputStreamReader(System.in);/由系统标准输入设备构造BufferedReader对象PrintWriteros=newPrintWriter(socket.getOutputStream();/由Socket对象得到输出流,并构造PrintWriter对象BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream();/由Socket对象得到输入流,并构造相应的BufferedReader对象,所需的类和方法,Stringreadline;readline=sin.readLine();/从系统标准输入读入一字符串while(!readline.equals("bye")/若从标准输入读入的字符串为"bye"则停止循环os.println(readline);/将从系统标准输入读入的字符串输出到Serveros.flush();/刷新输出流,使Server马上收到该字符串System.out.println("Client:"+readline);/在系统标准输出上打印读入的字符串System.out.println("Server:"+is.readLine();/从Server读入一字符串,并打印到标准输出上readline=sin.readLine();/从系统标准输入读入一字符串/继续循环os.close();/关闭Socket输出流is.close();/关闭Socket输入流socket.close();/关闭Socket,所需的类和方法,catch(Exceptione)System.out.println("Error"+e);/出错,则打印出错信息,所需的类和方法,ObjectOutputStream类ObjectOutputStream类具有将类的对象写入持久存储介质的功能.持久的存储介质可以是磁盘或套接字。这由ObjectOutputStream类的writeObject()方法完成.writeObject()方法的语法如下:FileOutputStreamfp=newFileOutputStream(“data.txt”);ObjectOutputStreamostream=newObjectOutputStream(fp);Datedate=newDate();Ostream.writeObject(Date)date);,实例分析,任务单,实例分析,实例分析,步骤1:选择创建网络客户机所需的类和方法。创建网络客户机,用到了Socket类的getOutputStream()方法和ObjectOutputStream类的writeObject()方法。步骤2:确定用户定义的类,它们的目的,方法用户定义了User类,来保留申请人的信息;定义了UserFrame类。,实例分析,步骤3:确定用户定义类中的数据类型和变量用户在程序中定义了如下数据变量:classUserimplementsSerializableStringname;Stringpasswords;,实例分析,步骤4:确定连接服务器时的IP地址和端口号建立连接的服务器的IP地址是:127.0.0.1,端口是1432。步骤5:确定要提交到服务器上的数据要提交到服务器的数据保存在User类的一个对象中。步骤6:确定何时提交数据当用户点击登录按钮时提交数据。,实例分析,步骤7:确定要处理的异常当调用writeObject()方法时,要处理InvalidClassException,NotSerializableException,IOException三个异常。步骤8:确定异常的出错信息InvalidClassException的出错信息是”用户类无效”后跟异常的详细信息NotSerializableException的出错信息是”该对象没有序列化”后跟异常详细信息;IOException的出错信息是”不能连到服务器”后跟异常的详细信息。,实例分析,完整的客户机程序,小结,客户/服务器模型是一种内部数据处理和存储与数据显示相分离的应用程序开发结构。网络协议是一套系统在网络上通讯所遵循的规则和约定。在Java有两种协议可用于通信:数据报是使用用户数据报协议(UDP),而sockets是使用传输控制协议/因特网协议(TCP/IP)Socket是支持TCP协议的基本类。TCP是可靠的流网络连接协议。ServerSocket是因特网服务器程序用于监听客户请求的类。ServerSocket事实上不执行服务;而是代表客户创建Socket对象。,小结,Socket类具有提供对客户数据流的引用的功能,这一引用是从数据可以被接收,或可以发送到客户机的地方开始的。这由Socket类的getInputStream()和getOutputStream()方法来完成getInputStream()方法初始化了一个ObjectInputStream类的对象之后,客户端就可以向服务器发送数据。ObjectOutputStream类的writeObject()方法可用于向数据流中写对象类型的数据。,

注意事项

本文(java教程socket网络编程.ppt)为本站会员(max****ui)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

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




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!