当前位置:首页 >> 自然科学 >>

java网络编程


Java网络编程

1

Java与网络
Java语言取得成功的领域之一就是网络 (其他语言)数页代码---->(Java)一条语句 TCP/IP(传输控制协议/网间协议)是internet的主要协议, 定义了计算机和外设进行通信所使用的规则(应用层,传 输层,网络层,链路层). 大多数基于internet的应用程序被看作TCP/IP协议的上 一层. 如 : ftp, http, smtp, pop3, telnet, nntp等 IP地址:TCP/IP网络中的每台计算机都有唯一的地址-IP地址. 在Java中,有一个用来存储internet地址的类叫 InetAddress.
2

网络层次
4层网络结构:

3

传输层的两个基本协议
1 TCP协议:确保以发送时的顺序接受,丢包 重新传递,数据对于连接太快TCP会调整速度 等 2UDP协议: 允许接受方检测被破坏的包,不保 证这些包正确的顺序传输。实时的音频或视频 应用程序经常使用。如果UDP有纠错功能一般 由应用层来实现,如TFTP等。UDP本身没有此 功能
4

Java网络编程
Java的网络编程是建立在传输层之上的, 我们可以创建自己的应用层协议。Java 仅支持TCP和UDP。(ICMP不支持) Java已经给我们提供好了基于传输层协 议的类(Stream Socket和 Datagram Socket) Java不能直接发IP数据包
5

TCP协议的实现
Socket是实现TCP协议的基本工具, Socket对程序员掩盖了网络底层实现的 细节。如:纠错,重传,网络地址等 Socket是网络上运行的程序之间双向通 信链路的最后终结点 IP与端口的组合得出一个套接字,可以完 全分辨internet上运行的程序
6

Socket概念
端口号:TCP/IP协议为每种服务定义了一个端口,当一台 计算机上运行不同服务器程序时,根据端口号不同提供 相应的服务. 端口号不是计算机上的物理连接器,它只是具有软件意 义的假想端口 internet服务 服务 ftp telnet DNS 端口号 21 23 53 internet服务 服务 www nntp POP3 端口号 80 119 110
7

Socket的功能
1连接远程机器 2发送数据 3接受数据 4关闭连接 5绑定端口 6监听入站数据 7在所绑定得端口上接受来自远程的连接
8

Socket类
Socket类用代码通过主机操作系统的本 地TCP栈进行通信。 Socket为用户提供的接口是流。

9

Socket类
Server ServerSocket(port #) Server Socket.accept() Socket() OutputStream InputStream Close Socket Client Socket(host, port #) Attempt the connection

OutputStream InputStream Close Socket
10

Socket类(续)
程序员只需把传输内容转化为流

Stream
IP数 据 包 交 互 细 节 S o c k e t (服 务 器 端 )

Stream
S o c k e t( 客 户 端 )

11

客户端Socket
构造函数:
public Socket(String host,int port) throws unknownHostException,IOException Socket socket=new Socket( time.nist.gov ”,80); Socket(“ ,80); 含义: 1 创建一个socket对象 2尝试连接主机 主机名不存在或服务器没运行unknownHostException 其他原因抛: IOException
12

客户端Socket(续)
检查主机1024个端口哪些提供了 个端口哪些提供了TCP服务 检查主机 个端口哪些提供了 服务 public class PortsScanner{ String host=“localhost”; for (int i=1 ;i<1024;i++){ try{ Socket s=new Socket(host,i); System.out.println(“TCP server port is”+i); } catch(UnknownHostException e){….} catch(IOException e){……} }

}

13

时间协议的使用
使用Socket完成一些应用层的协议。
telnet完成此协议: 完成此协议: 完成此协议 %telnet vision.poly.edu 13 Trying 128.238.42.35 Connected to Vision.poly.edu Escape character is ‘^]’ Sun Oct 28 11:05:15 2007 Connection closed by foreign host

14

时间协议的使用
public class Daytime client{ Public static void main(String args){ String hostName; if(args.length>0) hostname=args[0]; try{ Socket socket=new Socket(hostName,13) InputStream timeStream = theSocket.getInputStream(); StringBuffer time=new StringBuffer(); int c; while((c=timeStream.read()!=-1)) time.append((char)c); String timeString=time.toString().trim(); System.out.println(timeString); } catch(..){..} 运行命令:java Daytime client time.nist.gov 运行结果: Sun Oct 28 11:05:15 运行结果: 运行命令 15 2007

客户端Socket(续)
Socket使用之后要注意关掉.一般来说 socket确实会在两个流的一个关闭后或在 被垃圾回收时自动关闭。但是对于敏感 的程序,在垃圾回收介入之前,系统会 很快到达能打开的socket上限。尤其是跟 很多硬件设备打交道的软件系统。

16

客户端Socket(续)
try{ Socket connection=null; connection=new Socket(“time.nist.gov ”,13); //与socket交互 与 交互 } catch(UnknownHostException ex){ System.err.println(ex); } catch(IOException ex){ System.err.println(ex); } finally{ if(connection!=null) connection.close(); }
17

半关闭Socket
close()方法同时关闭Socket的输入和输 出 但JDK提供了shutdownInput()和 shutdownOutput的方法

18

Socket异常
BindException没有权限使用Socket,想使 用的端口被别的应用占用 ConnectException主机忙或没有监听该 端口的进程 NoRouteHostException表示连接超时 ProtocolException表示网络接受的数据 违反TCP/IP规范
19

ServerSocket
服务器Socket等待连接而客户端Socket 发起连接。一旦ServerSocket建立起来连 接,服务器就是用一个正常的Socket对 客户端发送数据。

20

ServerSocket基本流程
1 创 建 一 个 新 的 ServerSocket

2 accept()监 听 如 站 连 接

3通 过 调 用 输 入 输 出 流 火 的 客 户 传来的信息

4根 据 应 用 层 的 协 议 交 互

5服 务 器 或 者 客 户 端 关 闭 连 接

21

ServerSocket的构造函数
构造函数:
public ServerSocket(int port)throws BindException,IOException ServerSocket socket=new ServerSocket (80); 含义: 创建一个server socket对象,服务的端 口是80,如果port设为0或者null Java会随机选 一个未占用的port 如果端口已经被其他应用程序占用抛出 BindException
22

ServerSocket的构造函数(续)
public ServerSocket(int port,int queueLength)throws BindException,IOException Queue表示入站连接请求队列的长度,这个长度必须 小于操作系统所允许的最大长度 public ServerSocket()throws IOException 没有端口创建是没有意义的,因为客户端不知道如何 连接过去 ServerSocket ss=new ServerSocket(); SocketAddress http=new InetSocketAddress(80); ss.bind(http);

23

ServerSocket的监听方法
accept()监听客户端的连接。在未连接的 时候accept()是阻塞的,他会停止执行流 并等待

24

简单的日期时间服务器
while(true){ try{ Socket connection=null; connection=server.accept(); Write out=new OutPutStreamWriter(connection.getOutputStream()); Date now=new Date(); out.write(now.toString()+”\r\n”); out.flush(); connection.close(); } catch(UnknownHostException ex){ System.err.println(ex); } catch(IOException ex){ System.err.println(ex); } if(connection!=null) connection.close(); 25 }

UDP的实现
UDP的实现类DatagramPacket和 DatagramSocket. DatagramPacket的作用:将应用层的数据 字节准变为UDP的传输单位datagram

26

UDP的实现(续)
DatagramSocket与TCP的Socket不同, UDP没有连接的概念,没有TCP那样的服 务器Socket和客户端Socket的概念。 DatagramSocket既可以发又可以收,可 以面对多个DatagramSocket进行收发, 不像TCP协议中的1 on 1的关系,服务器 没有必要创建Socket与客户端Socket通 讯。
27

TCP通讯与UDP通讯对比
通讯信道 Socket Socket

ServerSocket Socket

通讯信道

Socket

服务器端

客户端

28

TCP通讯与UDP通讯对比
DataGramSocket DatagramSocket DataGramSocket

服务器端

客户端

29

DatagramPacket类
DaragramPacket转化成的Datagram已经 与IP层的数据包非常接近,包含了目标 地址 而TCP的数据片需要Socket告诉其目标地 址,然后组成IP数据包。

30

DatagramPacket类
接受和发送数据包的构造函数是不同的: 1 接受数据包: public DatagramPacket(byte[] buffer,int length) 两个参数1 byte[] buffer表示接受数据包的数组, length表示这个数组的长度。 2发送数据包: public DatagramPacket(byte[] data,int length,InetAddress destination,int port) 除了包括接受的参数外还包括目标地址和端口

31

DatagramPacket类(续)
创建一个DatagramPacket:
String s=“This is a Test”; byte[] data =s.getBytes(“ASCII”); try{ InetAddress ia=InetAddress.getByName(“www.sina.com”); int port=80 DatagramPacket dp=new DatagramPacket(data,data.length,ia,port); } catch(IOException e){…}

32

DatagramSocket类
与DatagramPacket类似发送与接受Socket只是构造函 数不相同 发送Socket对象 DatagramSocket client=new DatagramSocket() 由于发送无需关心发送端口所以操作系统会自动分配 一个端口发送时服务器的端口已经写在了 DatagramPacket中了 接受Socket对象 DatagramSocket server=new DatagramSocket(port) 由于需要监听客户端Socket所以必须指定port

33

DatagramSocket类(续)
客户端程序例子: 客户端程序例子: InetAddress server=InetAddress.getName(“www.sina.com”); BufferReader userInput=new BufferReader(new inputStreamReader(System.in)); DatagramSocket theSocket=new DatagramSocket(); while(true){ String theLine=userInput.readLine(); if(theLine.equals(“.”))break; byte[] data=theLine.getBytes(“UTF-8”); DatagramPacket theOutput=new DatagramPacket(data,data.length,server,port); theSocket.send(theOutput); } }
34

DatagramSocket类(续)
服务器端程序例子: 服务器端程序例子: DatagramSocket server=new DatagramSocket(port); DatagramPacket packet=new DatagramPacket(buffer,buffer.length); while(true){ server.receive(packet); String s=new String(packet.getData(),0,packet.getLength(),”UTF-8”); System.out.println(s); packet.setLength(buffer.length); }

35

DatagramSocket类(续)
DatagramSocket的对象用完之后也是要 关闭,如果等到垃圾回收关闭,有可能 会造占满所有允许的Socket数。 TCP的Socket和UDP的Socket可以共用一 个端口两种协议是毫不相干的且端口也 只是个逻辑概念

36

组播Socket
与传统传播的区别:
未使用组播 服 务 器 使用组播 服 务 器

路由器

路由器

PC

PC

PC

PC

PC

PC

PC

PC

37

组播的使用
采用MulticastSocket用法相近,但多了4 个动作: 1加入组播组 2向组播组发送数据 3接受组播组的数据 4离开组播组

38

组播接受实例:
服务器端程序例子: 服务器端程序例子: MulticastSocket server=new MulticastSocket (port); InetAddress ia=InetAddress.getByName(“224.2.2.2”);//定义组播组 定义组播组

Server.joinGroup(ia);
byte[] buffer=new byte[8192]; DatagramPacket packet=new DatagramPacket(buffer,buffer.length); while(true){ server.receive(packet); String s=new String(packet.getData(),0,packet.getLength(),”UTF-8”); System.out.println(s); }

39

有用的工具类—InetAddress类
Java对于IP地址的高级表示。它包含了 主机名和IP地址,我们知道了其中一个 信息可以得到另一个信息。 3个构造函数:
1 public static InetAddress getByName(String hostName) throws UnknownHostException 2 public static InetAddress[] getAllByName(String hostName) throws UnknownHostException

40

InetAddress类(续)
public static InetAddress[] getLocalhost(String hostName) throws UnknownHostException 通过DNS得到IP地址和hostname的转换

41

InetAddress类应用
查找Microsoft所有的 地址: 所有的IP地址 查找 所有的 地址: public class AllAddressesOfMicroSoft{ public static void main(String args[]){ try{ InetAddress[] addresses=InetAddress.getAllByName(“www.microsoft.com”); for(int i=0;i<addresses.length;i++){ System.out.println(addresses[i]); } catch(UnknownHostException e){} } }

42


赞助商链接
相关文章:
Java网络编程课程设计
Java 网络编程实践 课程设计说明书 课程名称: Java 网络编程课程设计 题目:基于 C/S 的学生信息管理 姓名: 学号: 指导教师: 戴领辉 201211044 王小刚 教学班号...
java网络编程课程设计终极版
201212120209 网络工程、2012 级本 2 班 Java 网络编程 吕加国 职称: 副教授 2015 年 4 月---2015 年 6 月 枣庄学院信息科学与工程学院制 2015 年 4 月 ...
Java网络编程和应用举例
Java网络编程和应用举例_计算机软件及应用_IT/计算机_专业资料。TCP(transmission control protocol): 是专门设计用在与不可靠的因特网上提供可靠的, 端到端的字节...
网络系统命令与JAVA网络编程_图文
网络系统命令与JAVA网络编程_计算机硬件及网络_IT/计算机_专业资料。网络系统命令与JAVA网络编程 网络系统命令与 JAVA 网络编程 实验内容:运行常用网络系统命令 arp,...
Java网络编程实验一到四答案
Java网络编程实验一到四答案_IT认证_资格考试/认证_教育专区。中国矿业大学 计算机学院 2014-2015Java实验一到四答案 实验一 开发工具和语言基础 By 光绪 一、...
基于Java Socket 网络编程
基于Java Socket 网络编程的山寨 QQ (学习韩顺平老师的视频整理出的笔记)内容含盖: 1.Java 面向对象编程 2.界面编程 3.网络编程 4.多线程 5.文件 I/O 操作...
java网络编程
java网络编程 - 网络编程,要熟悉 io 流,先说一下相关知识点。 public class FileInputStreamextends InputStream FileInputStre...
java网络编程测试题
java网络编程测试题_互联网_IT/计算机_专业资料。1.案例题目描述: 做一个电商后台管理功能,包括:后台管理布局页面、商品管理模块,实现列表功能、分页、 商品修改...
Java网络编程实验报告
Java网络编程实验报告_调查/报告_表格/模板_实用文档 暂无评价|0人阅读|0次下载|举报文档 Java网络编程实验报告_调查/报告_表格/模板_实用文档。中国矿业大学...
java网络编程步骤
java网络编程步骤_IT/计算机_专业资料。网络编程步骤TCP 客户端编程步骤: 1、 建立网络连接: 客户端网络编程的第一步都是建立网络连接。 在建立网络连接时需要指定...
更多相关文章: