Java:网络编程

网络:

计算机网络: 是不同地区,通过网络来传递数据,来进行数据的交互

网络编程的三大要素:
1. ip
2. 端口号
3. 协议

ip:
ip 是每一台电脑的唯一标识

ip4 是由0-255组成,是四个字节 一般网络都192.168==>c类网络 a类一般政府(军事用途),
一般子网络是: 10.08 本地的特殊的ip 是 127.0.0.1(this)
查看当前电脑的ip地址 ipconfig 拼服务器是否连通了,也就是拼ip地址(重点)

ip6 :是由8个数组数组,四个16精制组成

java 方法:
提供获取ip的类 InetAddress public static InetAddress getLocalHost() 返回本地主机
public String getHostAddress() 获取ip地址
public String getHostName() 获取ip的主机名:public String getHostName()

端口号:每一个软件(每一个进程的唯一标识)
端口号:是当软件开启之后,系统给其生成的一个,也可以自己去设置,
当软件开启是端口号系统产生,当软件关闭的时候,回收

常用软件的端口号
Tomcat: 8080
oracle:1521
mysql:3306
qq:4000
邮箱的端口号: 网易 137

协议: 各个计算机网络传输的一个规范: 协议分为7层
主要说的是传输层 : TCP UDP + xmpp 协议 ==> 即时通讯(qq,微信)
web阶段主要: http 协议 , https 协议
UDP面向无连接的协议: 传输的数据快,但是可以会丢数据(cts飞q) 会出现卡顿
TCP 面向连接的协议: 传输慢,不会丢失数据(三次握手) ==>qq传消息 文字需要准确性,使用的就是这个协议

http 与https:都是属于一次性的连接==>也就是客户端给服务器发送请求,当交互完,这个请求就断开了
https =http+ssl 证书,这个证书保证数据的传输的安全性 大部分上线的网站都会使用https协议

面向协议来进行通信 :TCP 做一个对象
Socket 对象: 接字是两台机器间通信的端点。
构造方法:public Socket(String host,int port) 如果是本机ip地址传递localhost
传递两个参数 一个ip地址, 一个是端口号
常规的方法:
public OutputStream getOutputStream()throws IOException 写数据的流对象
public InputStream getInputStream()throws IOException 读取数据的对象
public void shutdownOutput()throws IOException 类似于flush()方法

客户端==> 发送消息的过程
1.实例化这个socket对象
2. 通过socket对象 得到输出流 OutputStream
3.调用 write()
4. shutdownOutput()
5.拿到输入流 InputStream
6. new BufferReader(new InputStreamReader(new FileInputStream))
7.关闭资源

ServerSocket 此类实现服务器套接字
构造 : public ServerSocket(int port) 需要与客户端的端口号一样
常用的方法:public Socket accept()throws IOException 监听客户端发送的消息,返回一个Socket

服务器 ==>接收的过程:
1.实例化ServerSocke
2. 调用 accept() 返回的是一个socket对象
3.拿到输入流 InputStream
4. new BufferReader(new InputStreamReader(new FileInputStream))
5.得到OutputStream 对象
6.调用 write()
7.shutdownOutput()
8.关闭资源

注意:运行的时候,要先运行服务器,再运行客户端

如果有两个客户端, 一个服务器,就会产生这样一个错误 Connection refused: connect
解决这个问题 : 是用多线程解决这个问题 : 解决多个客户端对应一个服务器的问题

使用socket实现文件上传的功能 步骤总结
客户端:
1.读取出需要上传的图片
2 .通过socket拿到的输出流写入到服务器

服务器:
1.通过socket拿到输入流把图片读取出来 (1.需要创建一个文件夹来保存所有的图片,2.避免图片被覆盖)
2.保存在本地

以上都是基于tcp协议来进行操作的:面向连接 传输的时候不会丢失数据,但是传输慢

UDP
基于UDP协议进行传输,类似于发包裹

传输的类主要是 DatagramSocket 此类表示用来发送和接收数据报包的套接字
构造方法:
public DatagramSocket(int port,InetAddress laddr) 第一个数端口号 第二个参数是地址
public DatagramSocket(int port)参数是端口号

常规的方法是:
public void send(DatagramPacket p)throws IOException 发送数据包
public void receive(DatagramPacket p)throws IOException 接收数据包

DatagramPacket 此类表示数据报包 (包裹对象)
第一个参数是 字节数组
第二个参数是从字节数组的什么地方开始
第三个是到什么结束
第四个:获取的ip对象
第五个就是端口号

两个重要的构造方法:
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)

重要的方法:
public SocketAddress getSocketAddress() 返回的就是SocketAddress
public byte[] getData() 获取缓冲区的数据

客户端的步骤: 基于UDP的客户端
1. 实例化这个对象
2.构建一个数据包
3…发送数据
4.关闭资源

服务器: 基于UDP的服务器
1. 实例化这个对象DatagramSocket
2. 构建一个包裹对象
3.接收数据 receive()
4.关闭资源

基于udp比较繁琐, 没有获取流对象的方法,所有只能够按照以上的方法区操作
开发使用的是第三方 环信与融云(sdk) tcp+udp 即时通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值