/**
*
* 网络编程的基础知识
* 网络协议与TCP/IP
* IP地址和Port(端口号)
* 本地回路的IP地址:127.0.0.1
* 端口号的范围为0-65535之间,0-1023之间的端口数是用于一些知名的网络服务和应用
* UDP与TCP
* TCP,传输控制协议(Transmission Control Protocol),是面向连接的通信协议
* UDP,用户数据报协议(User Datagram Protocol),是无连接通信协议
*
* TCP UDP的数据帧格式简单图例
* 协议类型 源IP 目标IP 源端口 目标端口 帧序号 帧数据
* 基中协议类型用于区分TCP, UDP
*
* Socket
* Socket是网络驱动层提供给应用程序编程的接口和一种机制
* 可以把Socket比喻成是一个港口码头,应用程序只要把货物放到港口码头,就算完成了货物的运送
* 应用程序只需要等待货物到达码头后,将货物取走
*
* Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己对应的IP和Port
*
* Socket数据发送过程
* 1 产生Socket->应用程序
* 2 应用程序(调用bind将Socket的信息通知给驱动程序)->驱动程序
* 3 驱动程序(驱动程序根据从网卡传送来的数据报中的指定目标端口号,将处理后的数据传送到相应的Socket中)->Socket
* 4 Socket(应用程序从Socket中取数据) -> 应用程序
*
*
* Java中的网络编程类
* 位于java.net包中
* DatagramSocket类用于UDP通信
* ServerSocket类用于TCP通信的服务器端
* Socket类用于TCP通信的服务器和客户端
*
*
* UDP网络程序
* DatagramSocket类
* 构造函数
* public DatagramSocket()
* public DatagramSocket(int port)
* public DatagramSocket(int port, InetAddress laddr)
* close方法
* send(DatagramPacket p)方法
* receive(DatagramPacket p)方法
*
* DatagramPacket类
* 如果把DatagramSocket比作创建和港口码头,那么DatagramPacket就是发送和接收数据的集装箱,
* 构造函数:
* public DatagramPacket(byte[] buf, int length)
* public DatagramPacket(byte[] buf, int length, InetAddress address, int prot)
* getInetAddress和getPort方法
* getData和getLength方法
*
* InetAddress类
* InetAddress是用于表示计算机IP地址的一个类,而在日常应用中的计算机地址是用""
*
* 最简单的UDP程序
* 字符串与字节数组之间的双向转换
* UDP接口程序必须先启动运行,才能接口UDP发送程序发送的数据,
* 用start命令来打开新命令行窗口的好处
* 解决发送中文字符串的问题
*
*
* 用UDP编写网络聊天程序
* 1 在这个列表框中显示所有接收到的消息
* 2 在这个文本框中输入对方的IP地址
* 3 在这个文本框中输入要发送给对方的消息,按回车后发送
* 分不三全步骤来完成:
* 1 编写图形用户界面
* 2 编写网络消息发送功能
* 3 编写网络消息接收功能
* 几个问题:
* 1 这个网络程序能够自己给自己发送数据吗?
* 2 如何发送广播数据?
* 3 这个程序可以在Interent上使用吗?使用私有IP并通过网关代理上网的计算机呢?
*
* 私有IP通过网关代理上网的原理
*
*
* TCP网络程序
* TCP网络程序的工作原理
* ClientlSocket -> 客户端发出连接 ServerSocket
* 服务器接受请求并创建新的Socket -> 为client创建Socket
* 两个Socket之间建立专线连接
*
* TCP客户端程序与TCP服务器端程序的交互过程:
* 1 服务器程序创建一个ServerSocket,然后调用accept方法等待客户来连接
* 2 客户端程序创建一个Socket并请求与服务器建立连接
* 3 服务器接收客户的连接请求,并创建一个新的Socket与该客户建立专线连接
* 4 建立了连接的两个Socket在一个单独的线程(由服务器程序创建)上对话
* 5 服务开始等待新的连接请求,当新的连接请求到达时,重复步骤(2)到步骤(5)的过程
*
*
* ServerSocket类
* 构造函数:
* public ServerSocket();
* public ServerSocket(int port)
* public ServerSocket(int port, int backlog)
* public ServerSocket(int port, int backlog, InetAddress bindAddr)
* close()方法
* accept方法
*
*
* Socket类
* 构造函数:
* public Socket();
* public Socket(String host, int port)
* public Socket(InetAddress address, int port)
* public Socket(String host, int port, InetAddress localAddr, int localPort)
* public Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
* getInputStream和getOutputStream方法
*
*
* 简单的TCP服务器程序
* TCP服务程序必须先启动运行,TCP客户程序才能连接TCP服务器
* 使用Windows提供的telnet程序测试TCP服务器程序
* 使用BufferedReader包装类,从网络输入流中一次读取一行文本
* 如何打开telnet程序的本地回显功能
*
*
*
* 完善的TCP服务器程序模型
* 编程实例:
* 服务器程序能够同时与多个客户端会话,客户端每次向服务器发送一行字符文本,服务器就将这行字符文本中的所有字符反向排列反回送给客户端,当客户端向服务器发送的一行字符文本内容为"quit"时,
* 服务器结束与客户端的会话
*
* TCP服务器程序模型的编写要点:
* TCP服务器程序要想能接收多个客户端连接,需要循环调用ServerSocket.accept方法
* 服务器程序与每个客户端连接的会话过程不能互想影响,需要在独立的线程中运行
* 一个线程服务对象与一个服务器端Socket对象相关关联,共同来完成与一个客户端的会话
*
*
* 如何检测和解决端口冲突问题
* 合用netstat命令查看当前正在被使用的TCP端口号
* 通过一个配置参数来指定TCP服务程序所使用的端口号
*
*
* TCP客户端程序
* 编程实例:
* 编写一个与上面的服务器程序通信的客户端程序
* 要点:
* 连接服务器的IP地址和端口号不要固定编写在程序代码中,而是通过程序的运行时参数来指定,以提供较好的灵活性和高的通用性
*
*
*
* 通过TCP程序在网络上传递对象
* ObjectInputStream和ObjectOutputStream可以从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流
*
* 使用ObjectInputStream和ObjectOutputStream来包装低层网络字节流,TCP服务器和TCP客户端之间就可以传递对象类型的数据
*
* 编程实例:通地网络传输Java对象
*
* 怎么理解应用程序协议和网络通信协议的的关系
* 怎么区分ASP, JSP与网络编程的概念
*
* 访问Internet网络资源
* java.net包中还有URL, URLDeconder, URLEncoder, URLConnection, HttpURLConnection等类
*
* 本节讲解的内容
* URL(统一资源定位符)
* HTTP协议
* URL类
* 工厂设计模式
* URLConnection和HttpURLConnection类
*
* URL(Uniform Resource Locator)
* URL的基本组成:协议,主机名,端口名,资源名
* 例如:http://www.ituji.cn:8080/index.html
*
* 相对URL,例发"/a.html" "./a.html" "../../a.html" "a.html"
*
* URL编码规则
* 将空格转换为加号(+)
* 对0-9 a-z A-Z之间的字符保持不变
* 对于所有其他的字符,用这个字符的当前字符集编码在内存中的十六进制格式表示,
* 并在每个字节前加上一个百分号(%),如字符"+"用%2B表示,字符"="用%3D表示,字符"&"用%26表示,每个中文字符在内存占两个字节,字符“中”用%D6%D0表示,字符"国"用%B9%FA表示
* 对于空格也可以直接使用其十六进制编码方式,即用%20表示,而不是将它转换成加号(+).
* java.net包中提共了URLEncoder和URLDecoder这两个类,来实现URL编码和解码
*
*
* HTTP协议的会话过程
* 基于HTTP1.0协议的客户机与服务器的信息交换过程
* 建立连接->发出请求信息->发出响应信息->关闭连接
*
* 基于HTTP1.1协议的客户机与服务器信息交换过程
* 建立连接->发出第一次请求->发出第N次请求->发出关闭连接请求->关闭连接
*
* HTTP请求消息
* 一个完整的请求消息包括:一个请求行,若干消息头,以及实体内容.
* 例如:
* GET /articles/news/today.aps HTTP/1.1
* Accept:*
* Accept-Language:en-us
* Connection: Keep-Alive
* Host:location
* Referer: http://localhost/links.aps
* User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT5.0)
* Accept-Encoding:gzip, deflate
*
* HTTP响应消息
* 一个完整的响应消息包括:一个状态行,若干消息头,以及实体内容
* 例如:
* HTTP/1.1 200 OK
* Server: Microsoft-IIS/5.0
* Date: Thu, 13 Jul 2000 05:46:53 GMT
* Content-Length: 2291
* Content-Type:text/html
* Set-Cookie: XXXXX; path=/;
* Cache-control:private
*
* <HTML>
* ................
* </HTML>
*
* 了解几个HTTP消息头
* Connection
* 用于指定处理完本次请求/响应后,客户端与服务器是否继承保持连接,设置值可以为Keep-Alive和close
* Accept-Language
* 用于指出客户机期望服务器返回的文档所使用的国家语言,可以指定多个以逗号分隔的国家语言
* Content-Length
* 用于表示实体内容的长度(字节数)
* Range
* 用于指定服务器只需要返回文档中的部分内容及内容范围,有以下几种使用格式
* 1): Range: bytes=100-599 请求服务器从100到599值
* 2): Range: bytes=100- 请求服务器返回从100开始的值
* 3): Range: bytes=-100 请求服务器返回最后100个值
* Content-Range:
* 用于指定服务器返回的部分实体内容的位置信息,例如:
* Content-Range: bytes 2543-4532/7898
*
* URL类
* 构造函数(都可引发MalformedURLException异常)
* public URL(String spec)
* public URL(String protocol, String host, int port, String file)
* public URL(String protocol, String host, int prot, String file, URLStreamHandler handler)
* public URL(URL context, String spec)
*
* getProtocol, getHost, getPort, getFile等方法
*
* openConnection方法返回URLConnection对象
*
* 工厂设计模式
* URL类的setURLStreamHandlerFactory(URL StreamHandlerFactory fac)静态方法
*
* StreamHandlerFactory类的createURLStreamHandler(String protocol)方法
*
*
* URLConnection与HttpURLConnection类
* URLConnection与HttpURLConnection的作用
* URLConnection的连接过程
* setRequestProperty方法
* getHeadFields方法
* getInputStream和getOutputStream方法
* getHeaderFiled, getContentLength, getContentEncoding, getContentType等方法
* 一个HTTP连接可以被多个HttpURLConnection实例对象共享,调用HttpURLConnection的disconnect方法可以关闭低层共享网络
*
* 编程实例:将访问www.google.com站点的HTTP请求消息的Accept-Language头分别设置成日文和中文后,然后打印出www.google.com站点返回的所有响应消息头和网页内容
*
*
* 思考与实践(1)
* 1 描述TCP, UDP数据帧格式,并比较TCP和UDP的区别
* 2 画图说明应用程序, Socket, 网络驱动程序之间的数据传送过程与工作关系
* 3 自己编写出UDP网络聊天程序
* 4 将完善的TCP服务器程序模型例子程序中的Servicer类中的向客户端输出的语句:
* pw.println(strWord+"--->"+strEcho);
* 使用下面两条语句中的任何一条替换
* pw.print(strWord+"--->"+strEcho+"\r\n");
* pw.print(strWord+"--->"+strEcho+System.getProperty("line.separator"));
* 客户端都接受不到服务器端的响响信息,这是为什么呢?
* 5 修改完善的TCP服务器程序模型例子程序,让用户可以在启动运行服务器程序时,通过程序参数指定的监听端口号并且,用户指定的端口号被保存到一个文件中
* 当服务器程序下次启动运行时,直接从文件中读取那个端口号作为监听端口号
* 6 查阅HTTP协议资料,编写一个简单的web服务器
* 7 利用HTTP协议的Range的Content-Range消息头,URL的HttpURLConnection类,编写一个能实现HTTP断点续传的客户端程序
*
*
*
* @(#)lesson9.java
*
* lesson9 application
*
* @author
* @version 1.00 2013/9/1
*/ public class lesson9 { public static void main(String[] args) { // TODO, add your application code
System.out.println("Hello World!");
}
}

  

java第九节 网络编程的基础知识的更多相关文章

  1. python六十七课——网络编程(基础知识了解)

    网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...

  2. TCP/UDP网络编程的基础知识与基本示例(windows和Linux)

    一.TCP编程的一般步骤 服务器端: 1.创建一个socket,用函数socket() 2.绑定IP地址.端口等信息到socket上,用函数bind() 3.开启监听,用函数listen() 4.接收 ...

  3. Java学习之网络编程实例

    转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...

  4. Java进阶之网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  5. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  6. Java高级特性 第8节 网络编程技术

    一.网络概述 1.网络的概念和分类 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设 ...

  7. 第84节:Java中的网络编程(中)

    第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...

  8. 第62节:探索Java中的网络编程技术

    前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...

  9. Java学习:网络编程总结

    Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...

随机推荐

  1. NeoKylin5.6下安装部署达梦(DM7)数据库

    1.准备操作系统 1.1 系统登录界面 1.2 操作系统版本信息 [root@jdbh ~]# uname -ra Linux jdbh -.el5xen # SMP Fri Jul :: EDT x ...

  2. 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

    JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...

  3. Microsoft Dynamics CRM 2011 相关-摘自网络

    Microsoft Dynamics CRM Server 2011硬件需求: 组件 *最低要求 *推荐配置 处理器 x64 体系结构或兼容的双核 1.5 GHz 处理器 四核 x64 体系结构 2 ...

  4. Media Queries详解--转

    Media Queries直译过来就是“媒体查询”,在我们平时的Web页面中head部分常看到这样的一段代码:  <link href="css/reset.css" rel ...

  5. struct和class 区别

    struct和class区别与联系 关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始化.如果没有定义构造函 ...

  6. Akka实践一些总结

    最近在一些服务中使用了akka,主要用来做异步解耦和本地消息分发(路由),这里简单总结一下用法. 与spring集成 网上有不少集成的例子,要使用到spring的扩展. 我这边没有这样处理,而是简单把 ...

  7. SpringMVC Web项目升级为Springboot项目(一)

    一.项目改为Springboot项目 1.将pom中所有spring相关依赖删除,添加spring-boot-starter及spring-boot-starter-web(项目中可能有其他sprin ...

  8. mysql学习笔记二 —— 权限体系

    要点: 1.MySQL的API2.MySQL的相关文件3.MySQL的权限体系 1.MySQL的API 应用程序接口 (application program interface) 1.1 命令行中的 ...

  9. BZOJ.4767.两双手(组合 容斥 DP)

    题目链接 \(Description\) 棋盘上\((0,0)\)处有一个棋子.棋子只有两种走法,分别对应向量\((A_x,A_y),(B_x,B_y)\).同时棋盘上有\(n\)个障碍点\((x_i ...

  10. Iview同步异步验证

    直接上代码了: html: <Form ref="termForm" :model="currentData" :rules="ruleTerm ...