/**
*
* 网络编程的基础知识
* 网络协议与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. 01网络编程(基础知识+OSI七层协议+TCP与UDP)

    目录 01 网络编程 一.软件开发架构 1.1 CS架构 1.2 BS架构 二.网络理论前戏 2.1 简介 2.2 常见硬件 三.OSI七层协议(五层) 3.1 七层协议 3.2 五层协议 3.3 知 ...

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

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

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

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

  5. Java进阶之网络编程

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

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

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

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

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

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

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

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

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

随机推荐

  1. Anaconda需要添加的环境变量

    F:\Anaconda3 F:\Anaconda3\Scripts F:\Anaconda3\Library\bin

  2. Qt中对QDomDocument和QDomnode的理解

    一.对QDomDocument和QDomnode的理解 QDom前缀的都是代表节点类型.所以有,QDomElement代表一个Element节点,而QDomText代表一个Text节点.QDomNod ...

  3. 用java打暴雪星际争霸(2)——执行測试机器人

    原创内容.转载请注明. 在上一节安装完成后.或者您直接打开我分享的虚拟机后,我如今将解说怎样启动測试机器人. 第一步,打开Eclipse,导入机器人演示样例项目,如图所看到的. 第二步,我们能够看到就 ...

  4. Dubbo服务化最佳实践

    分包 建议将服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API 的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP). 如果需要,也 ...

  5. IIS 7.0 SSL 部署指南

    一.  生成证书请求 1.进入IIS控制台    进入IIS控制台,并选择服务器的服务器证书设置选项.  2.添加证书请求    进入服务器证书配置页面,并选择“创建证书申请”  3.选择加密服务提供 ...

  6. iOS开发-Launch Image和Launch Screen

    Launch Image是App的启动图片,LaunchScreen是iOS8之后的功能,两者都可以设置app的启动图片.iOS8之后官方的推荐了使用Launch screen.xib,在xib的中通 ...

  7. SQL Server 2005 Integration Services (SSIS)数据源之MySQL

    一安装MySQL数据库的ODBC驱动 下载MySQL Connector ODBC 3.51.rar 单击setup按默认安装即可! 如下图所示,在ODBC数据源管理器中看到“MySQL ODBC 3 ...

  8. set练习

    #include <iostream> #include <set> #include <vector> using namespace std; int main ...

  9. ubuntu忘记root密码 的解决方法

    alt+f2,在弹出的运行窗口中输入:gnome-terminal,回车. 即进入终端 输入:sudo passwd root,回车后会提示你输入你当前用户的密码 之后 按提示输入两次root的密码( ...

  10. SearchBySql

    Java: public List<Accountingdisclosure> searchAccountingdisclosuresBySql(String sqlStr)throws ...