黑马程序员 -- Java基础学习(9)

------- android培训java培训、期待与您交流! ----------


网络编程

概述

	步骤
		找到对方IP
		数据要发送到对方指定的应用程序上,为了表示这些程序,用数字进行标示
		  该数字叫做端口/逻辑端口,一个应用程序可以对应多个
		定义通信规则,成为协议
		  国际组织定义的通用协议TCP/IP,广域/局域网通用
		  IPX/SPX/NetBIOS 局域网
		  为了安全,很多组织或单位都有自己特定的协议	
	网络模型:层次的细致划分
		OSI参考模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
		TCP/IP参考模型:主机至网络层,网际层(IP),传输层(TCP/UDP),应用层(应用,表示,会话)(HTTP/FTP)
		JavaWeb开发:应用层
		  网络编程:网际层,传输层
	网络通讯要素
		IP地址
		端口:数字 0~65535
		  0~1024:系统程序保留
		  web:80
		传输协议

IP

	  IPDemo.java
	不易记忆,可用主机名
	  localhost 127.0.0.1 本地回环地址
	InetAddress 描述IP地址的类
		InetAddress i = InetAddress.getLocalHost();
		  UnknownHostException
		getHostName()
		InetAddress is = InetAddress.getByName(“***.***.***.***”);
		  如果地址和对应的主机名没有在网络上,则解析不成功,名字还是IP地址
		有可能不止一个主机地址 getAllByName()

TCPUDP

	UDP:面向无连接
		将数据及源和目的封装在数据包中,不需要建立连接
		数据包大小限制在64K		不可靠协议
		不需要建立连接,速度快
	TCP:面向连接
		建立连接形成数据传输通道,进行大量数据传输
		三次握手,可靠协议
		必须建立连接,效率稍低

Socket 套接字

	通信的两端就是Socket,数据在Socket间通过IO传输
	UDP Socket    UDPDemo.java
		DatagramSocket 数据
		DatagramPacket 数据报包
		发送一段文字数据
			建立UDPSocket服务
			提供数据,将数据封装到数据包中
			通过Socket服务的发送功能发送
			关闭资源
		接收方
			定义UDPSocket服务,通常会监听一个端口
			定义数据包用于存储接收到的字节数据
			  数据包中有不同方法可以提取不同数据信息
			通过Socket服务的receive方法存入数据
			  receive()是阻塞式方法
			通过数据包对象的特有功能提取信息
				getAddress().getHostAddress()
				getData()
				getLength()
				getPort()
			关闭资源
		用键盘输入    UDPDemo2.java
		  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		192.168.1.255 广播地址
		  192.168.1.0 网络地址
		  聊天程序    ChatDemo.java
		  因为收发动作不一致所以要定义两个run方法,而且要封装到不同的类中
	TCP Socket    TCPDemo.java    TCPDemo2.java
		客户端:Socket
			对象建立时就可连接指定主机
			建立Socket时要求有服务端存在并连接成功
			  连接后会有通路流进行数据传输
			步骤
				创建Socket,指定目的主机和端口
				获取输出流    getOutputStream()
				输出
				获取输入流,读取服务端反馈
				关闭客户端资源
		服务端:ServerSocket
			建立ServerSocket服务,监听一个端口
			accept方法获取连接过来的客户端对象,阻塞式
			使用对应客户端的读取流读取发过来的数据
			关闭服务端(可选)
		练习:文本转换服务器,服务端把文本转换为大写返回给客户端    TransTextDemo.java
			客户端
				IO的操作规律思考
				源:键盘录入
				目的:网络输出流
				文本数据:字符流
				提高效率:缓冲
			步骤
				建立服务
				获取键盘录入
				发送数据,需要刷新缓冲,需要发送回车符,因为readLine()方法需要接收回车
				获取返回的大写数据
				关闭资源
				  over时,退出循环,s.close()运行,返回-1;服务器端收到-1也退出循环
		TCP复制文件    UploadText.java
			需要结束标记
				自定义结束标记:不好,如果文件中如果有重复字符会提前结束
				  out.println(“over”);
				自定义时间标记
				  long l = System.currentTimeMillis();
				  dos.writeLong(l);
				Socket自带方法:s.shutDownOutput()
				  相当于给流中写入一个结束标记-1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值