目录
- DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
真挺好用的writeUTF写汉语可以write写字节也可以,很好用.
还有就是在socket中不能传送字符,只能是字节.
- 在socket通信中因为通信双方都只有一个socket所以所有的
dataOutputStream.writeUTF(file.getName()); dataOutputStream.write(buffer,0,len); String name = dataInputStream.readUTF(); fileOutputStream.write(buffer, 0, len); 这种方法都只能执行一次,所以这种方法执行的结果都要注意接收,不接收再调就没有了.
因此他们的生命周期就是执行一次.一次发送就要有一次接收这是一次流程.
计算机网络
所谓计算机网络,就是把分布在不同区域的计算机与专门的外部设备用通信线路相互连接成一个规模大,而且功能强的网络系统,从而使得计算机之间可以相互传递信息,共享数据、软件等资源。
- 按地理位置分为:
局域网
城域网
广域网,最大的是Internet
网络编程相关概念
- 网络编程: 所谓网络编程,指的就是在同一个网络中不同机器之间的通信
计算机之间通信需要的条件
IP地址
- IP地址指的是互联网地址(Internet Protocol Address ,是联网设备与互联网之间的唯一标识,在同一个网段中,IP地址是唯一的
- IP地址是数字型的,是一个32位的二进制,通常将其分成4个8位的二进制数,每8位之间用圆点隔开,每个8位整数可以转换为一个0~255的十进制整数,例如:202.9.128.88
- 分为IPV4和IPV6
- 查看IP地址的命令:ipconfig
IP地址分类
- A类:保留给政府结构,1.0.0.1 ~ 126.255.255.254
- B类:分配给中型企业,128.0.0.1 ~ 191.255.255.254
- C类:分配给任何需要的个人,192.0.0.1 ~ 223.255.255.254
- D类:用于组播,224.0.0.1 ~ 239.255.255.254
- E类:用于实验,240.0.0.1 ~ 255.255.255.254
- 回收地址:127.0.0.1,指本地机,一般用于测试使用
- IP地址可以唯一的确定网络上的一个通信实体,但一个通信实体可以有多个通信程序同时提供网络服务,此时还需要使用端口
端口
数据的发送和接收都需要通过端口出入计算机,端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能两个程序占用同一个端口。
端口号的取值范围:0~65535
端口分类:
- 公认端口:0~1023
- 注册端口:1025~49151
- 动态或私有端口:1024~65535
常用端口:
- mysql:3306
- oracle:1521
- tomcat:8080
浏览器:80
通信协议
需要通信的设备之间需要实现相同的通信协议- 网络分层:
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 - 通信协议分类:
- 传输层协议:TCP和UDP
- 网络层IP协议:IPV4和IPV6,互联网协议
- 应用层协议:HTTP
TCP/IP、UDP概念
- TCP/IP
- Transfer Control Protocal传输控制协议
- IP Internet Protocal 网际协议
- TCP/IP特点是:保持长连接,数据传输比较稳定可靠
TCP连接机制:三次握手机制
断开连接:四次挥手机制
- UDP 数据报协议
类似广播、短信,特点:快速,不可靠
应用场景:聊天等实时性不强的程序 - Socket网络连接
基于TCP/IP协议,实现长连接,可靠应用场景:
网络游戏、视频、语音通信、文件的上传下载等等Java中的Socket(套接字)
实现点对点的通信
服务器端
ServerSocket 用于等待和获得客户端连接
创建:
ServerSocket(int port) 方法 : port是端口号,一旦创建ServerSocket后,就会对该端口进行侦听
常用方法:
- Socket accept() 接受连接的客户端。执行该方法时,如何当前没有客户端连接,就会阻塞线程,直到有客户端连接。返回值Socket就是连接上来的客户端
- void close()
客户端:
Socket 用于连接服务器端
创建:
- Socket(String ip,int port)
- ip 就是服务器端的IP地址
- port 就是服务器端侦听的端口号
- 一旦创建Socket对象,就建立和服务器端的连接
常用方法:
- InputStream getInputStream()
获得输入流,实现数据的读取 - OutputStream getOutputStream()
获得输出流,实现数据的发送 - void close()
- 注意:Socket的IO流关闭后,Socket连接会自动关闭
客户端连接服务器端后,给服务器端发消息
服务器端:
- 创建ServerSocket对象,指定端口
- 执行ServerSocket的accept方法获得客户端连接
- 通过accept获得客户端Socket后,调用Socket的getInputStream()方法获得输入流
从输入流读取数据,显示出来
客户端:
- 创建Socket对象,指定服务器ip和端口
- 获得Socket对象的输出流,getOutputStream
通过输出流发送数据
HTTP
- Hyper Text Transfer Protocal 超文本传输协议
- 属于应用层协议,基于TCP/IP协议
规定传输的双方,发送文本和接受文本的格式
应用于: 浏览器上网
服务器和客户端之间交互
请求方法:
- GET 参数和URL一起发送,不安全,URL的长度有限
- POST 参数单独发送,安全,数据长度没有限制
- PUT 添加
- DELETE 删除
- TRACE 跟踪
- OPTIONS 获得配置参数
HEAD 发送请求头响应头
响应代码:
- 200 ok
- 404 资源不可访问
- 403 没有权限
- 405 请求方法没有实现
- 500 服务器内部错误
HTTP的特点:
- 简单、快速
- 无连接,不能保持长连接
比如:打开百度,输入百度地址,会访问百度的服务器,服务器把百度的页面HTML代码发给浏览器,发送完后浏览器和服务器断开。 - 无状态,服务器不会保留客户端(浏览器)的状态(数据)
Java的HTTP连接
URL 代表网络资源的地址
创建方法:
new URL(String urlStr) urlStr就是网址
方法:
URLConnection openConnection() 打开连接
HttpURLConnection 网络连接
方法:
- InputStream getInputStream() 获得输入流
- OutputStream getOutputStream() 获得输出流
- setConnectionTimeout(long timeout) 设置连接超时
- setRequestMethod(String method) 设置请求方法
- int getResponseCode() 获得相应代码
- setDoOutput(boolean b) 设置是否可以发生数据
- disconnect() 关闭
作业:
1、实现一个查询系统,
创建商品表,定义编号,名称,价格,产地等字段,在表中插入一些数据
系统分为客户端和服务器端,客户端输入商品名称的关键字,发送给服务器端,服务器端查询和关键字有关的商品,将商品信息发送给客户端,客户端要显示查询到的商品。
0)定义商品类
1)建库建表,插数据
2)客户端向服务器端发送一条数据,打印
3)服务端用该数据作为关键字,对数据库进行模糊查询,获得List集合,打印
4)使用Gson将List集合转换为字符串,发送给客户端
5)客户端连接服务器,发送数据后,读取字符串
6)将字符串转换为List集合,打印