Day07 (网络编程)

网络编程

前述: (概念类比)

(TCP)打电话: 连接——接通——通信

(UDP)发短信: —发送即完事——接收

1.概述

(是什么?)计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统网络管理软件网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

(干什么?)传播信息、数据交换、通信

(要怎么达到?)要点

  1. 如何准确地定位到网络的一台主机上和定位到某个应用上:用Ip地址和端口号
  2. 找到这个主机,该如何传输数据?

1.2网络通信的要素

通信双方的地址

ip地址和端口号

规则

即网络通信的协议,http协议,ftp协议、udp、tcp

1.2.1 IP地址

Java类:InetAddress

作用:唯一定位到具体的网络计算机上

eg: 主机地址: 127.0.0.1

IP地址分类:

IPV4:4个字节组成,0-255。

IPV6 : 128位,8个无符号整数。

域名:方便记忆IP

1.2.2 端口

Java类:InetSocketAddress

作用:端口表示计算机的一个程序的进程,用来区分软件

规定:0~65535

TCP、UDP

端口分类:

​ 公有端口 0~1023

​ HTTP:80

​ HTTPS:443

​ FTP:21

​ Talent:23

​ 程序注册端口:2014~49151

​ 动态、私有:49152~65535

dom命令:

  • 查看所有: netstat -ano
  • 查看具体端口:netstat -ano|findstr “端口号”
  • 查看具体窗口的具体进程:tasklist|findstr “端口号”

1.2.3 通信协议

协议:约定的一种规则

网络通信协议要做到: 网络传输效率、速率、代码结构……

通信协议簇:

重要:

​ TCP:用户传输协议(打电话)

​ 特点:连接稳定、

​ 3次握手、4次挥手、

3次握手:
A:你瞅啥?
B:瞅你咋地?
A:干一架

4次挥手:
A:我要走了
B:你真的要走了吗?
B:你真的真的要走了吗?
A:我真的走了

其中:A代表客户端,B代表服务端

​ 客户端和服务端、

​ 传输完成释放连接,效率低

​ UDP:用户传输报协议(发短信)

​ 特点:不连接、不稳定、客户端和服务端没有界限、

TCP

客户端

package com.lin;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    public static void main(String[] args) {
        OutputStream outputStream = null;
        Socket socket = null;
        InetAddress serverImp;
        try {
            //要连接的地址和端口
            serverImp = InetAddress.getByName("127.0.0.1");
            int port = 9999;

            //客户端与服务器连接窗口
            socket = new Socket(serverImp,port);

            //向窗口传入数据
            outputStream = socket.getOutputStream();
            outputStream.write("xiao发在变强".getBytes());

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

服务端

package com.lin;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;

public class Server {
    public static void main(String[] args) {
        ByteArrayOutputStream byteArrayOutputStream = null;
        InputStream inputStream = null;
        Socket accept =null;
        ServerSocket serverSocket =null;
        try {
            //服务器的端口
            serverSocket = new ServerSocket(9999);
			//获取连接窗口
            accept = serverSocket.accept();
            inputStream = accept.getInputStream();
            byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024];
            int len;
            while((len= inputStream.read(bytes))!=-1){
                byteArrayOutputStream.write(bytes,0,len);
            }
            System.out.println(byteArrayOutputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                byteArrayOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                accept.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

UDP

客户端

DatagramSocket datagramSocket =null;
        DatagramPacket datagramPacket ;
        try {
            int port = 9998;
            datagramSocket = new DatagramSocket(port);
            InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
            String msg="xiaoF";
            datagramPacket = new DatagramPacket(msg.getBytes(),msg.getBytes().length, inetAddress,port);
            datagramSocket.send(datagramPacket);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            datagramSocket.close();
        }

服务端

 DatagramSocket datagramSocket = new DatagramSocket(9998);
        byte[] bytes = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length);
        datagramSocket.receive(datagramPacket);
        System.out.println(datagramPacket.getAddress().getCanonicalHostName());
        datagramSocket.close();

附:URL和IO流过程代码

try {
                //链接地址
                url = new URL("https://mr1.doubanio.com/9e9df9d25389bf0ee9730139715ba8f1/0/fm/song/p1960200_128k.mp4");
                //进入链接
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                //下载链接内容
                InputStream inputStream = urlConnection.getInputStream();
                //文件流
                FileOutputStream fileOutputStream =new FileOutputStream("music.mp4");
                //缓冲区
                byte[] bytes = new byte[1024];
                int len;
                //将链接内容放到缓冲区中,后写入到文件流中
                while((len = inputStream.read(bytes))!=-1){
                    fileOutputStream.write(bytes,0,len);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值