




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计,第9章 网络通信,主讲:张思民,清华大学,主要内容,1、网络编程基础 2、基于TCP网络程序设计 3、基于UDP网络程序设计 4、* 基于C/S模式的分布计算,一、 Java与网络,IP协议、 TCP协议和UDP协议。,1、网络数据通信的几个重要协议,源IP地址,目的IP地址,IP 数据报结构,传输层数据报文结构:TCP,传输层数据报结构:UDP报文,2、端口号,端口号:TCP/IP协议为每种服务定义了一个端口。,服务 端口号 ftp 21 http 80 pop3 110,8,3、 套接字Socket,Socket是网络程序中最常用的方式,用于建立两个不同程序之间通过网络进行通信的信道。,2、 套接字Socket,什么是socket ?,套接字是IP与端口的组合,可以分辨在internet上运行的程序,进程与进程之间建立起连接,建立套接字Socket,在客户端使用socket类,指定服务器IP和端口号,以便连到服务器上: Socket(host_IP, prot); 在服务器端使用ServerSocket类,以等待客户端的连接: ServerSocket(port);,客户端呼叫,服务器等待,12,Socket主要方法:,在客户端:建立socket连接后,还应该建立输入输出数据流。 getInputStream( ) 获得输入流 getOutputStream( ) 获得输出流 在服务器端: ServerSocket类的accept( )方法使服务器处于阻塞状态,等待用户请求。,二、TCP协议 Socket编程,例1:演示服务器与客户之间的交互,服务器等待,客户访问,相互通一次信息。,客户端向服务器发出信息:“你好”,服务器接收到信息后,给出回应:“你好,我是服务器。”,21.5 Socket,. 21.5 Socket,创建服务器(端口号),定义数据成员,服务器等待 网络连接,建立socket流,读客户 端信息,向用户发出确认字符串,创建Socket实例,定义数据成员,建立socket流,读socket流 (接收并显示),送用户名给 服务器,关闭流,waiting for user, 4331,4331,“这里是服务器“,connetcting client.,你好,提示用户登录成功,读socket流,16,客户机端,import java.io.*; import .*; class C public static void main(String args) try Socket socket=new Socket(““,6565); DataOutputStream out=new DataOutputStream(socket.getOutputStream(); out.writeUTF(“我是客户机“); DataInputStream in=new DataInputStream(socket.getInputStream(); String s=in.readUTF(); System.out.println(“客户机收到:“+s); catch(Exception e) ,17,服务器端,import java.io.*; import .*; class S public static void main(String args) try ServerSocket s_socket=new ServerSocket(6565); Socket socket=s_socket.accept(); DataInputStream in=new DataInputStream(socket.getInputStream(); String s=in.readUTF(); System.out.println(“服务器收到:“+s); DataOutputStream out=new DataOutputStream(socket.getOutputStream(); out.writeUTF(“我是服务器“); catch(Exception e) ,21.5 Socket,显示服务器与客户机间的通信(服务器端),DataOutputStream out=null; DataInputStream in=null; ServerSocket s_socket=null; Socket c_socket=null; String s; /存放读取到的信息,try s_socket=new ServerSocket(4331); catch (IOException e) ,try c_socket=s_socket.accept(); catch (IOException e) ,创建服务器(端口号),定义数据成员,服务器等待 网络连接,用循环语句收发信息 (见下页),in=new DataInPutStream(clientSocket.getInputStream(); out=new DataOutputStream(clientSocket.getOutputStream();,建立socket流,等待客户登录,out.writeUTF(“这里是服务器“); clientSocket.close();,While (true) s=in.readUTF( ); if ( s!=null ) break; ,读客户 端信息,创建Socket实例,DataOutputStream out=null; DataInputStream in=null; String string; Socket socket=null;,定义数据成员,try socket=new Socket(““,4331);,input=new DataInputStream(socket.getInputStream(); output=new PrintStream(socket.getOutputStream();,建立socket流,catch(IOException e) System.out.println(“无法连接 ”); ,Out.writeUTF(“你好”); System.out.println(input.readLine();,读socket流 (看到提示),从键盘上读送用户 名送给服务器端,关闭流,mysocket.close(); System.out.println(“s“);,读服务器反馈,While (true) s=in.readUTF( ); if ( s!=null ) break; ,考虑多用户,第一种解决方案: 一台计算机上一次启动多个服务器程序,只是端口号不同。 myserver myclient-f21.bat myserver2myclient2-f9.bat,多用户的第二种方案,(支持多客户),Server,client1,client2,serverthread,serverthread,将服务器写成多线程的,不同的线程为不同的客户服务. main()只负责循环等待 线程负责网络连接,接收客户输入的信息,客户1,客户2,服务器,线程run(),下面简单分析 教材P276 例4,client(),Run( ),Out.writeUTF(),In.readUTF(),客户端,writer.start(),按钮事件(),socket,getInputStream,getOutputStream,服 务 器,服务器端,.,服务器 (4321) accept socket,客 户,IP client1,线程,客 户,IP client2,线程,服务器一端为了能接收多个客户的信息,它的输入流,输出流都是数组型的. ServerSocket.accept()等待用户连接,一旦连接上,则调用服务程序. 服务程序的主要内容是网络的读写,多客户的原因,网络读写的功能用多线程实现,因此将此部分功能单独分离出来,构成线程类,服务器端,client1,client2,serviceRequest,server,ServerSocket,Socket,getOutputStream,getInputStream,reader.run,reader.run,accept(),reader.start(),read_net_input,write_net_output(),在Java中,网络类都在 类库中。 用来存储internet地址的类InetAddress. 其主要方法: getHostName( ) 获取InetAddress对象的主机名或域名 getHostAddress( ) 获取InetAddress对象的IP地址 getLocalHost( )获取本机的IP地址,例:获取本机的IP地址 import .*; public class getLocalHostTest public static void main(String args) InetAddress myIP=null; try myIP=InetAddress.getLocalHost(); catch(UnknownHostException e) System.out.println(myIP); 创建inetAddress类不用构造函数(不用new),Java与网络,下面的例子演示java如何根据域名自动到DNS 上查找IP地址(与DNS服务器的连接减至一行) import .*; public class getIP public static void main(String args) InetAddress pku=null; try pku= InetAddress.getByName(“”); catch(UnknownHostException e) System.out.println(pku); ,三、基于数据报Datagram,TCP/IP传输层由两个并列的协议:TCP,UDP. UDP数据报的每个数据包要包含目的地址和端口号.,socket,server,client,Datagram数据报,server,client,在UDP中,要使用二个类: (1) DatagramSocket 类 发送时,用 send( )方法发送数据; 接收时,用 receive( )方法接收数据。 (2) DatagramPacket 类 用于打包或拆包 发送时打包: 包由数据、接收地址、端口号组成; 接收时拆包: 取出包中的数据、接收地址、端口号。,Datagram 工作过程,建立数据报socket();,建立一个报文包packet,等待请求报文,建立数据报socket,建立一个请求包,发出请求,获得对方地址,构成信息包,发送出去,创建接收包,等待接收,Datagram,一、服务器端发出报文的步骤如下: 1. 定义数据成员 DatagramSocket socket; DatagramPacket packet; InetAddress address;(用来存放接收方的地址) int port; ;(用来存放接收方的端口号) 2. 创建数据报文Socket对象 try socket=new DatagramSocket(1111); catch(.SocketException e) socket 绑定到一个本地的可用端口,等待接收客户的请求.,Datagram,3.分配并填写数据缓冲区(一个字节类型的数组) byte Buf=new byte256; 存放从客户端接收的请求信息. 4.创建一个DatagramPacket packet=new DatagramPacket(Buf数组, 256长度); 用来从socket接收数据,它只有两个参数 5. 服务器阻塞 socket.receive(packet); 在客户的请求报道来之前一直等待,Datagram,6. 从到来的包中得到地址和端口号 InetAddress address=packet.getAddress(); int port=packet.getPort(); 7. 将数据送入缓冲区 或来自文件,或键盘输入 8. 建立报文包,用来从socket上发送信息 packet=new DatagramPacket (buf,buf.length, address,port); 9. 发送数据包 10.关闭socket socket.send(packet); socket.close();,Datagram,二、客户端接收包的步骤如下: 1. 定义数据成员 int port; InetAddress address; DatagramSocket socket; DatagramPacket packet; byte sendBuf=new byte256; 2. 建立socket socket=new DatagramSocket();,Datagram,3. 向服务器发出请求报文 address=InetAddress.getByName(args0); port=parseInt(args1); packet=new DatagramPacket(sendBuf,256,address,port); socket.send(packet); 这个包本身带有客户端的信息 4. 客户机等待应答
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 住宅小区租赁保证金缴纳及使用规定合同
- 彩票店节假日促销活动合同
- 车辆抵押贷款合同规范
- 人才租赁合同:企业高级管理人员租赁合同
- 生态农业财务代理记账与农产品溯源合同
- 车辆无偿租赁给影视制作公司合同
- 工程用铲车采购协议范本
- 海鲜餐厅入驻海边酒店食堂的海鲜餐饮租赁合同模板
- 餐饮店员工健康体检与福利保障协议
- 仓储设施拆除与物流中心建设合同
- 2022年7月国家开放大学汉语言文学本科《中国当代文学专题》期末纸质考试试题及答案
- 2025年国务院国资委冶金机关服务中心(局)招聘1人历年自考难、易点模拟试卷(共500题附带答案详解)
- 高中文言文实词120个
- 中考数学-规律探究型问题(2种命题预测+17种题型合集+专题训练)(含答案)
- 建筑与环境设计专题知到智慧树章节测试课后答案2024年秋宁夏大学
- 2025年中国国际货运航空股份有限公司招聘笔试参考题库含答案解析
- 2025年全球及中国电池包用防爆阀行业头部企业市场占有率及排名调研报告
- 辽宁省沈阳126中学2025届中考生物考前最后一卷含解析
- 4S店烧烤活动方案
- 《大气辐射学》课件
- 新课标(水平三)体育与健康《篮球》大单元教学计划及配套教案(18课时)
评论
0/150
提交评论