14.网络编程

13.1网络编程

网络编程:数据是通过网络进行传输的

B/S  
C/S                       

13.2网络的基础

13.2.1网络模型:

	OSI:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
	TCP/IP:应用层(HTTP/数据)、传输层(分组、端到端/TCP、UDP/数据包)、网络层(路由、IP/数据帧)、网路接口层(010101)

13.2.2常用的网络协议:

	TCP协议:建立在连接的基础上。传输数据之前,两端(客户端和服务端)首先要建立连接。
		建立连接:经过3次握手
			1、客户端发送请求
			2、服务端响应,告诉客户端,我收到请求
			3、客户端发送确认请求
		断开连接:经过4次挥手
		
		提供的是可靠的数据传输。传输速度有限。端到端的数据传输。
		使用场景:传输的数据要求可靠。比如发送图片等文件
	
	UDP协议:无连接的。发送的数据,直接发,不管接收方是否收到的,也不确保收到的数据是否完全。
		不可靠。传输速度很快。支持一对一、一对多、多对多多的数据传输。
		使用场景:对传输速度要求高,对结果不可靠影响不大的。比如腾讯会议
	
	IP:IP地址:网络上的主机的唯一标识
		IPV4:4个字节   172.16.10.115
		IPV6:16个字节
		
		域名:www.baidu.com---dns----xx.xx.xx.xx
	
	端口号:对软件的逻辑标识
		系统都会默认分配一个端口号
		程序也可以自己指定端口号
		0-65535 0-1024已被占用
		常用程序的端口号:MySql 3306 SqlServer 1433 Oracle 1521

软件-通过网络-软件

编程:jdk —java.net
TCP
客户端
Socket 此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点
操作的是字节流
Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。

			InputStream getInputStream() 返回此套接字的输入流。 
			OutputStream getOutputStream()  返回此套接字的输出流。
			void shutdownOutput() 禁用此套接字的输出流。  
				对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列
			void close()关闭此套接字。 
	服务端(应该先启动,否则客户端会报异常ConnectException)
		ServerSocket 此类实现服务器套接字。服务器套接字等待请求通过网络传入
			ServerSocket(int port) 创建绑定到特定端口的服务器套接字。此方法在连接传入之前一直阻塞。
			Socket accept() 侦听并接受到此套接字的连接。 
				服务器端没有自己的字节流,那怎么用?他就用客户端的流和相应的客户端进行交互
				客户端-服务器   多-1
					A   input  output
					B   input output
					C   input  output
			void close() 关闭此套接字 

文件上传
Client—>Server
Client
C:\Users\86136\Desktop\img\1.jpg
1、把文件读到内存 FileInputStream
2、内存通过网洛传输到Server OutputStream
Server
1、读Socket InputStream
2、写入文件 FileOutputStream
文件下载
Client<—Server
Server
C:\Users\86136\Desktop\img\1.jpg
1、把文件读到内存 FileInputStream
2、内存通过网洛传输到Client OutputStream
Client
1、读Socket InputStream
2、写入文件 FileOutputStream

UDP 无连接、不可靠、
速度快、支持一对一、一对多、多对一、多对多
视频会议、语音通话
DatagramSocket 来发送和接收数据报包的套接字
每个在数据报套接字上发送或接收的包都是单独编址和路由的
为了接收广播包,应该将 DatagramSocket 绑定到通配符地址。在某些实现中,将 DatagramSocket 绑定到一个更加具体的地址时广播包也可以被接收。

	  DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。  ---发送
	  DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 ---接收
	  DatagramSocket(int port, InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。
	  
	  void receive(DatagramPacket p)  从此套接字接收数据报包。 
	  void send(DatagramPacket p) 从此套接字发送数据报包。 此方法在接收到数据报前一直阻塞

DatagramPacket 数据报包
	DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。
	DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
      		构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
     
    byte[] getData() 返回数据缓冲区。 
    int getLength() 返回将要发送或接收到的数据的长度。 
    int getPort() 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。 
    InetAddress getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。 

InetAddress 此类表示互联网协议 (IP) 地址。IP 地址是 IP 使用的 32 位或 128 位无符号数字
static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。
String getHostName() 获取此 IP 地址的主机名。

应用层 http编程—TCP
B/S url—server
1、Brower 输入网址 url(http://www.baidu.com) ,发送请求给百度的服务器
2、Server 接收到请求,响应,会给客户端回复html/json/png/文件
3、Brower 显示html

 URL 代表一个统一资源定位符	http://www.baidu.com/文件夹/文件
 	URLConnection openConnection() 返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
 URLConnection  代表应用程序和 URL 之间的通信链接
 	使用步骤:
 	1、通过在 URL 上调用 openConnection 方法创建连接对象。 
	2、处理设置参数和一般请求属性。 
	3、使用 connect 方法建立到远程对象的实际连接。 
	4、远程对象变为可用。远程对象的头字段和内容变为可访问。
	
	abstract  void connect() 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。 
	InputStream getInputStream() 返回从此打开的连接读取的输入流。 
	
	void setUseCaches(boolean usecaches) 将此 URLConnection 的 useCaches 字段的值设置为指定的值。 
	void setConnectTimeout(int timeout) 设置一个指定的超时值(以毫秒为单位),该值将在打开到此 URLConnection 引用的资源的通信链接时使用。 
	void setRequestProperty(String key, String value) 设置一般请求属性。 

HttpURLConnection
	abstract void disconnect() 指示近期服务器不太可能有其他请求。 
	int getResponseCode() 从 HTTP 响应消息获取状态码。 

XML(Extensible Markup Language)
HTML --w3c制定的标准

1、标记语言 
   xml 标签是可以自定义的 student order
   		语法是严格的。
   		区分大小写的
   		有且只有一个根标签
   		设计目标:存储数据(配置文件)、传输数据
   		特点:独立于操作系统、开发语言的
   		用途:交互数据的格式
   		
   		节点类型:元素Element 属性Attribute 文本Text   注释<!--  -->
   		转义字符:<   ----  &lt;     >----&gt;
   			或者把数据直接放在<![CDATA[  ]]>
   			
   		了解下如何解析xml?
   			1、DOM(Document Object Model) 文档对象模型  树模型  层次模型
   				优点:整个文档都存在内存中,随机访问或操作节点方便
   				 	理解简单
   				缺点:文档特别大,文档结构复杂,解析时效率低,消耗内存
   				
   				要点:
   				1、Document doc=builder.parse(new File("stu.xml"));
   					doc是Xml文档对象
   				2、Element root=doc.getDocumentElement();//获取根节点
   				3、NodeList getChildNodes();
   				4、getAttribute("id") 根据属性名拿到属性值
   				
   			DOM4J (DOM for java) 只局限于java
   				1、添加jar包、添加到build path
   				2、SAXReader reader=new SAXReader();
   				3、Document doc=reader.read(path);
   				4、getRootElement();  获取根节点
   				5、elements(); 获取所有的子元素
   				6、element(子标签名) 根据标签名获取子元素
   				7、attributeValue(属性名)  根据属性名获取属性值
   			
   			Jsoup
   				
   			2、SAX
   				不加载DOM树,从上往下扫描文档,节省内存
   				靠事件驱动 
   				优点:节省内存,灵活,效率相对高
   				缺点:做不到随机访问
   				
   html 标签是固定的 h1-h6 p img
   		不区分大小写
   		特点:表现数据

测试
黑盒:不关注代码,只关注功能。在什么场景下,点击了什么按钮,有没有什么反应。功能测试。
写测试用例。
白盒:写部分代码。脚本。自动化测试。

单元测试:junit

1、添加jar包(eclipse中继承的有,可以在build path中add library中直接选择junit)

2、测试类一般放置在单独的测试包中,命名方式:XXXTest/TestXXX

3、测试方法是可以独立运行的,由jvm调用,需要添加注解@Test。测试方法没有返回值。测试方法命名方式:test方法名

4、运行测试方法:
方式一:运行单个测试方法:光标放在方法名这一行,右键选择run as -Junit Test
方式二:运行所有测试方法:光标放在空白处,右键选择run as -Junit Test

5、测试结果:绿色—通过 红色–不通过
不提倡输出内容,而是通过断言来判断结果是否正确

6、测试类的生命周期
@BeforeClass
@Before
@Test1--------
@After
@Before
@Test2--------
@After
@@AfterClass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值