清华大学张思民Java课件

上传人:宝路 文档编号:47679140 上传时间:2018-07-04 格式:PPT 页数:42 大小:519.65KB
返回 下载 相关 举报
清华大学张思民Java课件_第1页
第1页 / 共42页
清华大学张思民Java课件_第2页
第2页 / 共42页
清华大学张思民Java课件_第3页
第3页 / 共42页
清华大学张思民Java课件_第4页
第4页 / 共42页
清华大学张思民Java课件_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《清华大学张思民Java课件》由会员分享,可在线阅读,更多相关《清华大学张思民Java课件(42页珍藏版)》请在金锄头文库上搜索。

1、Java语言程序设计第9章 网络通信主讲:张思民清华大学主要内容n1、网络编程基础n2、基于TCP网络程序设计n3、基于UDP网络程序设计n4、* 基于C/S模式的分布计算2一、 Java与网络IP协议、 TCP协议和UDP协议。1、网络数据通信的几个重要协议 3源IP地址目的IP地址 IP 数据报结构4传输层数据报文结构:TCP5传输层数据报结构:UDP报文62、端口号n端口号:TCP/IP协议为每种服务 定义了一个端口。服务 端口号ftp 21http 80pop3 110 73、 套接字SocketnSocket是网络程序中最常用的方式,用于建立两个不同程序之间通过网络 进行通信的信道。

2、82、 套接字Socket什么是socket ? 网络服务Mailftpfinger20 telnet数据结构 I/O缓冲区端口2123客户程序SocketIP,port套接字是IP与端口的组 合,可以分辨在internet 上运行的程序9进程与进程之间建立起连接10建立套接字Socketn在客户端使用socket类,指定服务器 IP和端口号,以便连到服务器上:Socket(host_IP, prot);在服务器端使用ServerSocket类, 以等待客户端的连接:ServerSocket(port);客户端呼叫服务器等待11Socket主要方法:在客户端:建立socket连接后,还应该 建

3、立输入输出数据流。getInputStream( ) 获得输入流 getOutputStream( ) 获得输出流在服务器端: ServerSocket类的accept( )方法使服务 器处于阻塞状态,等待用户请求。12ClientSocket(host, port #)Attempt the connectionOutputStream InputStreamClose Socket二、TCP协议 Socket编程ServerServerSocket(port #) Server Socket.accept() Socket()OutputStream InputStreamClose So

4、cket13例1:演示服务器与客户之间的 交互,服务器等待,客户访问,相互 通一次信息。客户端向服务器发出信息 :“你好”,服务器接收到信 息后,给出回应:“你好, 我是服务器。”1421.5 Socket. 21.5 Socket创建服务器(端口号)定义数据成员服务器等待 网络连接建立socket流读客户 端信息向用户发出确认字符串创建Socket实例定义数据成员建立socket流读socket流 (接收并显示)送用户名给 服务器关闭流waiting for user127.0.0.1 43314331“这里是服务器“connetcting client.你好提示用户登录成功读socket流

5、15客户机端nimport java.io.*;nimport .*;nclass C nnpublic static void main(String args) nn tryn Socket socket=new Socket(“127.0.0.1“,6565);n DataOutputStream out=new DataOutputStream(socket.getOutputStream();n out.writeUTF(“我是客户机“);n DataInputStream in=new DataInputStream(socket.getInputStream();n String

6、 s=in.readUTF();n System.out.println(“客户机收到:“+s);n catch(Exception e)nn16服务器端nimport java.io.*;nimport .*;nclass Snnpublic static void main(String args) nn tryn ServerSocket s_socket=new ServerSocket(6565);n Socket socket=s_socket.accept();n DataInputStream in=new DataInputStream(socket.getInputStre

7、am();n String s=in.readUTF();n System.out.println(“服务器收到:“+s);n DataOutputStream out=new DataOutputStream(socket.getOutputStream();n out.writeUTF(“我是服务器“);n catch(Exception e)nn1721.5 Socketn显示服务器与客户机间的通信(服务器端)DataOutputStream out=null; DataInputStream in=null; ServerSocket s_socket=null; Socket c_s

8、ocket=null; String s; /存放读取到的信息try s_socket=new ServerSocket(4331);catch (IOException e) try c_socket=s_socket.accept();catch (IOException e) 创建服务器(端口号)定义数据成员服务器等待 网络连接用循环语句收 发信息 (见下页)18in=new DataInPutStream(clientSocket.getInputStream(); out=new DataOutputStream(clientSocket.getOutputStream(); 创建服

9、务器(端口号)定义数据成员服务器等待 网络连接建立socket流等待客户登录out.writeUTF(“这里是服务器“); clientSocket.close();While (true) s=in.readUTF( ); if ( s!=null ) break; 读客户 端信息19创建Socket实例DataOutputStream out=null; DataInputStream in=null; String string; Socket socket=null;定义数据成员try socket=new Socket(“127.0.0.1“,4331);input=new Data

10、InputStream(socket.getInputStream(); output=new PrintStream(socket.getOutputStream();建立socket流catch(IOException e) System.out.println(“无法连接 ”); 20Out.writeUTF(“你好”); System.out.println(input.readLine();创建Socket实例定义数据成员建立socket流读socket流 (看到提示)从键盘上读送用户 名送给服务器端关闭流mysocket.close(); System.out.println(“s

11、“);读服务器反馈While (true) s=in.readUTF( ); if ( s!=null ) break; 21考虑多用户第一种解决方案:n一台计算机上一次启动多个服务器 程序,只是端口号不同。nmyserver myclient-f21.batnmyserver2myclient2-f9.batServer1(1111)client(2222)Server2(2222)client(1111)22多用户的第二种方案(支持多客户)Serverclient1client2serverthreadserverthread将服务器写成多线程的,不同的线程为不 同的客户服务. main(

12、)只负责循环等待 线程负责网络连接,接收客户输入的信息23客户1客户2服务器线程run()线程1( )线程2( )下面简单分析 教材P276 例4 24client()Run( )Out.writeUTF( )In.readUTF()客户端writer.start()按钮事件()socket getInputStreamgetOutputStream服 务 器25服务器端n.服务器 (4321)accept socket客 户IP client1线程客 户IP client2线程服务器一端为了能接收多个客户的信息,它的输入 流,输出流都是数组型的. ServerSocket.accept()等

13、待用户连接,一旦连接上, 则调用服务程序. 服务程序的主要内容是网络的读写,多客户的原因 ,网络读写的功能用多线程实现,因此将此部分功 能单独分离出来,构成线程类26服务器端client1client2 serviceRequestserverServerSocketSocketgetOutputStreamgetInputStreamreader.runreader.runaccept()reader.start()read_net_inputwrite_net_output()27n在Java中,网络类都在 类库中。n用来存储internet地址的类InetAddress.其主要方法:n

14、getHostName( ) 获取InetAddress对象的 主机名或域名ngetHostAddress( ) 获取InetAddress对象 的IP地址ngetLocalHost( )获取本机的IP地址28n例:获取本机的IP地址 import .*; public class getLocalHostTest public static void main(String args) InetAddress myIP=null;try myIP=InetAddress.getLocalHost();catch(UnknownHostException e)System.out.printl

15、n(myIP); 创建inetAddress类不用构造函数(不用new)29Java与网络 下面的例子演示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); 30三、基于数据报DatagramnTCP/IP传输层由两个并列的协议 :TCP,UDP. UDP数据报的每个数据包要包含目的 地址和端口号.socket serverclientDatagram数据报serverclient31在UDP中,要使用二个类:(1) DatagramSocket 类发送时,用 send( )方法发送数据;接收时,用 receive( )方法接收数据。(2) DatagramPa

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号