Day23

网络编程

  • 三要素:ip、端口号、协议

ip

  • ip是给每一台连接在互联网的电脑分配一个地址
  • ipv4:是由4个字节组成,一般的网络是192.168.0.0,a类一般是政府或者军事用途,本地的特殊ip是127.0.0.1,查看本地电脑的ip地址,使用命令指示符ipconfig。
  • ipv6:是由16个字节组成,也可以用四个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

协议

  • 计算机网络传输的规范: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
  • 传输层:TCP+UDP+xmpp–>即时通讯
  • web主要的协议:http协议、https协议、
  • UDP面向无连接的协议:传输速度块,但是会丢失数据,会出现卡顿。
  • TCP面向连接的协议,:传输速度慢,不会丢失数据(三次握手),需要确保数据的准确性,使用这个协议。
  • http与https:都是属于一次性的连接,也就是客户端给服务器发送请求,当交互完,这个请求就会断开。
  • https=http+ssl证书,这个证书保证数据的传输安全性,大部分网站是使用这个协议。

基于TCP协议进行传输

Socket

  • Socket对象:套接字是两台机器通信的断点。
  • 构造方法:public Socket(String host,int port) 如果是本机ip地址传递localhost,第一个参数传的是ip地址,第二个是端口号。
  • 常规的方法:
    • public OutputStream getOutputStream()throws IOException 写数据的流对象,可用OutputStream类来获取
    • public InputStream getInputStream()throws IOException 读取数据的对象,可用InputStream类来获取
    • public void shutdownOutput()throws IOException 类似于flush()方法,应注意通过以上的方法获取的流,调用close()方法,socket也会关闭
  • 客户端对服务端发送数据的基本实现步骤;
    1. 实例化socket对象
    2. 通过socket对象 得到输出流 OutputStream
    3. 调用write()
    4. 拿到输入流 InputStream
    5. new BufferReader(new InputStreamReader(new FileInputStream))
    6. 关闭资源

ServerSocket

  • 此类实现的是服务器的套接字
  • 构造:public ServerSocket(int port) 需要与客户端的端口号一样
  • 常用的方法
    • public Socket accept()throws IOException 监听客户端发送的消息,返回值是Socket类
  • 服务器获取客户端的消息:
    1. 实例化ServerSocket
    2. 调用 accept() 返回的是一个socket对象
    3. 拿到输入流 InputStream
    4. new BufferReader(new InputStreamReader(new FileInputStream))
    5. 得到OutputStream 对象
    6. 调用 write()
    7. shutdownOutput()
  • 注意:运行的时候要先运行服务器,再运行客户端

基于UDP协议进行传输

DtagramScoket

  • 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

  • 此类表示数据报包 (包裹对象)
  • 构造:
    • DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)第一个参数是 字节数组,第二个参数是从字节数组的什么地方开始 ,第二个参数是从字节数组的什么地方开始,第四个:获取的ip对象,第五个就是端口号。
    • DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
  • 常用方法:public byte[] getData() 获取缓冲区的数据
  • 基于UDP的客户端传输步骤:
    1. 实例化这个对象
    2. 构建一个数据包
    3. 发送数据
    4. 发送数据
  • 基于UDP的服务器接收步骤;
    1. 实例化这个对象DatagramSocket
    2. 构建一个包裹对象
    3. 接收数据 receive()
    4. 关闭资源
  • UDP比较繁琐,没有获取流对象的方法,所以只能够按照以上的方法操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值