




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
聊天设计与开发,网络编程-聊天室的设计与开发,聊天设计与开发,2,第2讲网络编程,客户机和服务器基于Socket的网络编程基于UDP协议的Socket通信,聊天设计与开发,网络运行机制,Java用于网络操作的功能包是,它包含多个访问各种标准网络协议的类包。Java的网络访问类包分别支持以下三个层次的网络运行机制。1)使用URL访问网络资源Java支持URL访问网络资源的机制,通过URL标识,可以直接使用http、file、ftp等多种协议,获取远程计算机上的资源,方便快捷地开发Internet应用程序。,聊天设计与开发,2)SocketSocket是建立在稳定连接基础上的以流传输数据的通信方式。它是目前实现客户服务器模式应用程序的主要手段。Java提供了对应于Socket机制的一组类能按照用户约定的通信协议实现网络通信。这种方式适合开发特定功能的网络通信程序。,网络运行机制,聊天设计与开发,3)Datagram在网络实际发展中,有时需要采用面向非连接的、以数据报方式工作的通信方式,即在不建立连接的情况下进行数据的传输,这适用于网络不可靠环境下的数据传输和访问。这种方式称为Datagram。,网络运行机制,聊天设计与开发,6,客户机/服务器(Client/Server)模式,简称C/S模式,采用一种协同应用程序开发模型,是指由一个或多个客户机、一个或多个服务器以及操作系统和进程间的通信系统构成的一个复合系统。基于这种模式的一个应用程序被分为两个部分,分别运行于网络中不同的计算机上,由此充分利用网络共享资源、通过协议提高工作效率。,1.客户机与服务器,聊天设计与开发,7,基本组成:客户机:一个面向最终用户的接口设备或应用程序,它通过从另一个设备或应用程序(服务器)请求信息,然后将信息交给用户。客户机在整个任务中主要负责与用户对话,将用户的需求传达给服务器,等服务器安装此请示提供相应的服务后,将服务结果返回给用户。,1.客户机与服务器,聊天设计与开发,8,服务器:服务器的硬件通常具有强大的信息处理能力,主要完成数据处理任务。服务器提供的典型功能有建立进程和网络服务地址,如监听客户的请求处理客户请求、将响应结果交给用户、释放与客户机的连接。通信系统:客户机与服务器之间的通信不仅需要硬件连接,而更重要的是进行软件连接。软件连接是一种软件通信过程,如网络协议等;硬件连接主要用到网卡、网线等。,1.客户机与服务器,聊天设计与开发,9,C/S模式的特点:位置透明:服务器可以驻留在与客户机相同或不同的处理器上,需要时,客户机/服务器平台可通过重新定向服务来掩盖位置,服务器过程的物理位置对用户透明,反之也是这样。共享资源:一个服务器可以同时为多个客户服务,并能控制存取共享资源。,1.客户机与服务器,聊天设计与开发,10,服务封装:客户过程只需知道服务器界面,不必了解其逻辑。可扩展性:支持水平和垂直扩展,前者指可以增加或更改节点;后者指可以转移到新的服务器处理器上。,1.客户机与服务器,聊天设计与开发,11,Socket也叫套接字,用来建立网络连接的一种通信方式。在Java中,利用Socket(插座)类可以很方便地进行网络编程。不需要知道你的电脑或对方的电脑是通过什么样的方式上网的,也不需要关心你们之间的距离,只要告诉Socket类你想和哪台电脑联系,其他的事Socket类自然会完成,从这个角度看,Socket类就像电源插座。,2.基于TCP协议的Socket的网络编程,聊天设计与开发,12,利用Socket类进行网络通讯时,首先要确定服务器和客户端。网络通讯是在两台电脑之间完成的,为了顺利建立连接,一般都采取一台电脑等候连接,而另一台电脑主动连接的方式。等待连接的电脑就叫做服务器,而主动连接的电脑叫做客户端。,2.基于TCP协议的Socket的网络编程,聊天设计与开发,13,客户端向服务器发送请求连接的信号,服务器接收到信号后,向客户端返回连接成功的信号,之后在二者之间就建立了一个连接通道,通道是双向的,服务器和客户端都可以通过这条通道向对方发送消息,二者的地位是相等的。,2.基于TCP协议的Socket的网络编程,聊天设计与开发,14,1、建立服务器端:建立服务器端对象,给出端口号,服务器端在这个端口等待客户端的连接调用accept函数监听端口,程序会停止在这里,一直等待客户端的连接当客户端连接到该端口之后,accept函数将建立一个Socket类,用于与客户端的通讯ServerSocket类会抛出IOException异常,必须用try.catch结构捕获该异常建立服务器端的代码示例:tryserverSocket=newServerSocket(4444);SocketconnSocket=serverSocket.accept();catch(IOExceptione)System.out.println(无法监听端口4444.);System.exit(-1);,2.基于TCP协议的Socket的网络编程-步骤1,聊天设计与开发,15,2.建立客户端的步骤:创建一个Socket对象,对象构造函数的两个参数分别为服务器端的主机名以及端口号程序将不断连接远程计算机,直到连接成功之后,才继续执行下面的代码tryclientSocket=newSocket(serverhost,4444);catch(IOExceptione)System.out.println(无法与服务器建立连接。);System.exit(-1);建立连接之后,服务器端和客户端即可对等地利用I/O流发送或者接收信息,2.基于TCP协议的Socket的网络编程-步骤2,聊天设计与开发,16,3、发送消息的步骤:获得Socket类的输出流建立一个PrintWriter对象,利用它向网络输出利用println函数发送消息PrintWriterout=newPrintWriter(connSocket.getOutputStream(),true);out.println(发送消息);,2.基于TCP协议的Socket的网络编程-步骤3,聊天设计与开发,17,4.接收消息的步骤:获得Socket对象的输入流新建一个读数据流的对象,以读取输入流将接收到的消息保存在缓存中调用缓存对象的readLine函数读入一行数据BufferedReaderin=newBufferedReader(newInputStreamReader(connSocket.getInputStream();StringinStr=in.readLine();BufferedReader对象是一个标准的读入、缓存数据对象。此对象缺省的缓冲区很大,足以放下收到的所有数据由于不知道通过网络会收到多少数据,因此先将接收到的数据暂存起来,然后再读取执行readLine函数时,会一直等到接收完一行数据之后才会继续执行下去,2.基于TCP协议的Socket的网络编程-步骤4,聊天设计与开发,18,TCP/IP协议下的Socket网络通信过程:在服务器端创建一个指定端口号的ServerSocket对象运行ServerSocket对象的accept()方法,在指定端口等待客户端请求,建立连接。在客户端创建一个指定计算机地址和与服务器端具有相同端口号的Socket对象,由Socket对象向服务器端发出连接请求。服务器端的ServerSocket对象接到请求信息后,创建一个Socket对象与客户端进行连接。连接建立后,服务器端和客户端可分别建立输入输出数据流进行数据传输。通信结束,关闭两端的Socket连接。服务器端调用ServerSocket对象的close()停止等待客户端请求。,2.基于TCP协议的Socket的网络编程-步骤4,聊天设计与开发,【例8-2】【服务器端程序】publicclassSocketServerpublicstaticvoidmain(Stringargs)throwsIOExceptionServerSocketss=newServerSocket(8888);Sockets=ss.accept();trySystem.out.println(“有客户端请求连接,客户端IP地址:+s.getInetAddress().getHostAddress()+,远程端口:+s.getPort()+,本地端口:+s.getLocalPort();BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(s.getOutputStream(),true);,聊天设计与开发,while(true)Stringstr=in.readLine();if(str.equalsIgnoreCase(exit)break;/忽略大小写System.out.println(接受客户端数据:+str);out.println(服务器响应:+str);System.out.println(服务器退出);finallyss.close();,聊天设计与开发,【客户端SocketClient】publicclassSocketClientpublicstaticvoidmain(Stringargs)throwsIOExceptionSockets=newSocket(,8888);tryBufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream();PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(s.getOutputStream(),true);,聊天设计与开发,while(true)/从键盘采集一行数据BufferedReaderinkey=newBufferedReader(newInputStreamReader(System.in);System.out.print(从键盘输入数据:);Stringstr=inkey.readLine();/读取一行out.println(str);if(str.equalsIgnoreCase(exit)break;Stringmsg=in.readLine();System.out.println(从服务器收到数据:+msg);System.out.println(客户端退出);finallys.close();,聊天设计与开发,1、先运行服务器端,显示空,然后运行客户端,此时,服务器端运行结果显示为:有客户端请求连接,客户端IP地址:,远程端口:1376,本地端口:8888客户端运行结果显示为:从键盘输入数据:,运行结果,聊天设计与开发,24,2.然后在客户端输入,“大连“后回车,则服务器端运行结果显示为:有客户端请求连接,客户端IP地址:,远程端口:1376,本地端口:8888接受客户端数据:大连客户端运行结果显示为:从键盘输入数据:大连从服务器收到数据:服务器响应:大连从键盘输入数据:,运行结果,聊天设计与开发,25,3.再在客户端输入,“exit“后回车,则服务器端运行结果显示为:有客户端请求连接,客户端IP地址:,远程端口:1376,本地端口:8888接受客户端数据:大连服务器退出客户端运行结果显示为:从键盘输入数据:大连从服务器收到数据:服务器响应:大连从键盘输入数据:exit客户端退出,运行结果,聊天设计与开发,26,基于UDP协议的信息传递具有速度快和可靠性不高的特点。可靠性不高表现为,数据在传输时,用户无法知道数据能否到达目标主机,数据到达目标主机的顺序是否和发出的顺序一致,也不能确定对方收到数据是否会回应。虽然UDP协议下的信息传输可靠性不高,但传输的速度快,因而在不追求可靠性的情况下,很适合采用这种协议。,3.基于UDP协议的Socket通信,聊天设计与开发,27,UDP协议下的Socket通信过程:在发送端用DatagramPacket类创建一个对象,将指定数据打包发送到指定计算机的端口。接收端用DatagramPacket类创建一个具有数据包指定端口的对象接收端创建一个数据包在接收端由DatagramPacket对象执行receive()方法可以用创建的数据包来接收从网络中传来的数据包。通信结束。,3.基于UDP协议的Socket通信,聊天设计与开发,28,【例8-4】【服务器接收端程序UDPServer.java】importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;.DatagramPacket;.DatagramSocket;.SocketException;publicclassUDPServerpublicstaticvoidmain(Stringargs)throwsIOException,聊天设计与开发,29,try/创建DatagramSocket对象,用来接收数据DatagramSocketsocks=newDatagramSocket(1400);/创建数据包,用于接收数据bytedata=newbyte8192;DatagramPacketreceivePacket=newDatagramPacket(data,data.length);/调用socks对象的receive方法接收数据,并存放到数据包中socks.receive(receivePacket);/显示客户端信息System.out.println(有客户端请求连接,客户端IP地址:+receivePacket.getAddress().getHostAddress()+,远程端口:+receivePacket.getPort();/解析数据包,提取receivePacket(从0到总长度所有数据)中的数据转换为字符串Strings=newString(receivePacket.getData(),0,receivePacket.getLength();System.out.println(接收客户端的数据为:+s);,聊天设计与开发,30,catch(SocketExceptione)e.printStackTrace();,聊天设计与开发,31,【例8-4】【客户发送端程序UDPClient.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省深圳市龙岗区布吉中学2026届中考一模语文试题含解析
- 中医养生文化与体育课程的结合与实践探索
- 项目实施的时间表安排
- 数字产业与制造业协同集聚的创新动力机制
- 县域经济高质量发展的策略及实施路径
- 2025版合肥租赁房屋押金管理协议
- 2025版房地产经纪公司销售顾问劳动合同样本
- 2025年文化产业园房屋建筑装修施工与配套服务合同
- 汽车智能充电设施建设项目实施方案
- 企业管理层杠杆收购的动态机制分析
- 外墙保温工程质量验收管理规范
- ISO27001:2022信息安全管理体系全套文件+表单
- 2024年公务员省考模拟考试及试题及答案
- 《资治通鉴》与为将之道知到课后答案智慧树章节测试答案2025年春武警指挥学院
- 浙江国企招聘2024杭州钱塘新区产业发展集团有限公司下属公司招聘13人笔试参考题库附带答案详解
- 港航疏浚事业部直属项目工程分包管理办法
- 路灯维修工考试题库单选题100道及答案
- 开题报告-中国特色社会主义教育学话语体系研究
- 成都市公安局锦江区分局招聘警务辅助人员真题
- 雨季施工安全注意事项
- DB32-T 4165-2021 多联式空调(热泵)系统工程技术规程
评论
0/150
提交评论