黑马程序员 -- Java基础学习(9)
来源:互联网 发布:塔布数据 编辑:程序博客网 时间:2024/06/05 12:42
------- 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()
▸ TCP和UDP
▸ 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
- 黑马程序员 -- Java基础学习(9)
- 黑马程序员 -- Java基础学习(1)
- 黑马程序员 -- Java基础学习(2)
- 黑马程序员 -- Java基础学习(3)
- 黑马程序员 -- Java基础学习(4)
- 黑马程序员 -- Java基础学习(5)
- 黑马程序员 -- Java基础学习(6)
- 黑马程序员 -- Java基础学习(7)
- 黑马程序员 -- Java基础学习(8)
- 黑马程序员 -- Java基础学习(10)
- 黑马程序员 -- Java基础学习(11)
- 黑马程序员-Java基础学习(函数)
- 黑马程序员-Java基础学习(数组)
- 黑马程序员——java基础学习日记(9)
- 黑马程序员Java学习日记(9)基础加强
- 黑马程序员-JAVA基础学习
- 黑马程序员--Java基础学习十(Java线程)
- 黑马程序员-java学习笔记-java基础
- SQL Server 2008中的hierarchyid
- 让你少奋斗10年的工作经验
- C/C++运算符指导原则
- 修心养性最美妙的九大疗法,超有用!
- VC 中设置程序 开机自动启动和取消自动启动
- 黑马程序员 -- Java基础学习(9)
- 生命中总有一些事情无法等待 你读懂了多少?
- 文件操作
- 有些心情写给自己,也只能写给自己
- Tomcat引起的中文乱码问题
- Linux下通过OTG把板卡上的一个磁盘或文件映射成PC机上的一个移动磁盘
- awk命令基本处理 -- shell
- reportservice制作柱状图
- 当你对未来迷茫的时候,请打开这个锦囊!