《Java语言》课件网络编程

上传人:Ron****an 文档编号:142920687 上传时间:2020-08-24 格式:PPT 页数:41 大小:429KB
返回 下载 相关 举报
《Java语言》课件网络编程_第1页
第1页 / 共41页
《Java语言》课件网络编程_第2页
第2页 / 共41页
《Java语言》课件网络编程_第3页
第3页 / 共41页
《Java语言》课件网络编程_第4页
第4页 / 共41页
《Java语言》课件网络编程_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《《Java语言》课件网络编程》由会员分享,可在线阅读,更多相关《《Java语言》课件网络编程(41页珍藏版)》请在金锄头文库上搜索。

1、java 网 络 编 程,主要内容,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

2、,什么是socket ?,套接字是IP与端口的组合,可以分辨在internet上运行的程序,进程与进程之间建立起连接,建立套接字Socket,在客户端使用socket类,指定服务器IP和端口号,以便连到服务器上: Socket(host_IP, prot); 在服务器端使用ServerSocket类,以等待客户端的连接: ServerSocket(port);,客户端呼叫,服务器等待,12,Socket主要方法:,在客户端:建立socket连接后,还应该建立输入输出数据流。 getInputStream( ) 获得输入流 getOutputStream( ) 获得输出流 在服务器端: Serv

3、erSocket类的accept( )方法使服务器处于阻塞状态,等待用户请求。,二、TCP协议 Socket编程,例1:演示服务器与客户之间的交互,服务器等待,客户访问,相互通一次信息。,客户端向服务器发出信息:“你好”,服务器接收到信息后,给出回应:“你好,我是服务器。”,21.5 Socket,. 21.5 Socket,创建服务器(端口号),定义数据成员,服务器等待 网络连接,建立socket流,读客户 端信息,向用户发出确认字符串,创建Socket实例,定义数据成员,建立socket流,读socket流 (接收并显示),送用户名给 服务器,关闭流,waiting for user,12

4、7.0.0.1 4331,4331,“这里是服务器,connetcting client.,你好,提示用户登录成功,读socket流,16,客户机端,import java.io.*; import .*; class C public static void main(String args) try Socket socket=new Socket(127.0.0.1,6565); DataOutputStream out=new DataOutputStream(socket.getOutputStream(); out.writeUTF(我是客户机); DataInputStream

5、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(); DataInputStrea

6、m 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; Serv

7、erSocket 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 DataOutputSt

8、ream(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(127.0.0.1,433

9、1);,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);

10、,读服务器反馈,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()

11、,client(),Run( ),Out.writeUTF(),In.readUTF(),客户端,writer.start(),按钮事件(),socket,getInputStream,getOutputStream,服 务 器,服务器端,.,服务器 (4321) accept socket,客 户,IP client1,线程,客 户,IP client2,线程,服务器一端为了能接收多个客户的信息,它的输入流,输出流都是数组型的. ServerSocket.accept()等待用户连接,一旦连接上,则调用服务程序. 服务程序的主要内容是网络的读写,多客户的原因,网络读写的功能用多线程实现,因此

12、将此部分功能单独分离出来,构成线程类,服务器端,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(

13、 ) 获取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与网络,下面的例子演示ja

14、va如何根据域名自动到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,serve

15、r,client,Datagram数据报,server,client,在UDP中,要使用二个类: (1) DatagramSocket 类 发送时,用 send( )方法发送数据; 接收时,用 receive( )方法接收数据。 (2) DatagramPacket 类 用于打包或拆包 发送时打包: 包由数据、接收地址、端口号组成; 接收时拆包: 取出包中的数据、接收地址、端口号。,Datagram 工作过程,建立数据报socket();,建立一个报文包packet,等待请求报文,建立数据报socket,建立一个请求包,发出请求,获得对方地址,构成信息包,发送出去,创建接收包,等待接收,Dat

16、agram,一、服务器端发出报文的步骤如下: 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.创建一个Datag

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

当前位置:首页 > 高等教育 > 大学课件

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