狂神-网络编程笔记

1.1概述

地球村

寄快递

打电话:--连接-- 接了---通话   TCP

华短信: --发送了就完事了---接受()UDP

 

一、计算机网络:地理位置不同  多台连接,网络通信协议 ,实现资源共享

二、网络编程的目的:

传播交流信息:数据交换,通信

三、想要到达这个效果需要什么

1,如何定位到准确的一台主机 :IP、端口、定位到某些资源

2、找到主机,如何传输数据:网络协议

万物皆对象

面向百度编程----》

1.2网络通信要素

mspaint :打开画图快捷键

OSI七层(国际理想化的)

TCP/IP(应用比较多)4层:应用层、传输层(TCP、UDP)、网络层、数据链路层 http

2.1IP地址: InetAddress

唯一定位一台网络计算机   127.0.0.1 本机

ip地址分类:

1、IPV4/IPV6  ipv4,4个字节组成,0-255,42亿,30亿在北美亚洲4亿   2011年用尽

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

2、公网(互联网)-私网(局域网)

ABCD类地址:折半

192.168.XX.XX是内部使用

2.2域名:记忆IP问题!

ip:www.vip.com

3.1、端口

http:80、ftp:21

4.1:通信协议

协议==约定 ==普通话

网络通信协议:速率、传输码率、代码结果、传输控制。。。

分层

TCP/IP协议簇:实际上上一组协议

TCP和UDP对比

TCP:用户传输协议       打电话

  连接,稳定

  三次握手、四次挥手

  最少需要三次,保证稳定连接

   A 你愁啥?

   B 瞅你咋地

   A 干一次

    ****以上是握手***

     A 我要走了!

   B 你真的要走了么?

   B 你真的真的要走了么?

    A 我真的真的要走了

    ****以上是四次挥手***

  客户端和服务端

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

UDP:用户数据包协议     发短信

  不连接,不稳定

  客户端和服务端:没有明确的界限

  不管有没有准备好,都可以发给你

  导弹攻击

  DDOS:洪水攻击!(饱和攻击)

------------------------------

出名的协议

TCP

IP:网络互联协议

 

 5.1TCP

客户端: 连接服务端socket 、发送信息 

服务器:建立服务端口,等待用户的连接,返回客户端socket,接受用户的消息

待补代码

  -------

  -------

6.1文件上传

   Tomcat

  服务端

    自定义S

    Tomcat服务器S:Java后端开发

 

  客户端

    自定义C

    浏览器B

 

7.1UDP

 发短信

8.1多线程实现聊天功能

封装的发短信功能:

public class TalkSend  implements  Runnable{
    DatagramSocket socket=null;
    private  int fromport;
    private String toIp;
    private  int toport;

    public TalkSend(int fromport, String toIp, int toport) {
        try {
            this.fromport = fromport;
            this.toIp = toIp;
            this.toport = toport;
            //声明的自己的端口号
            this.socket = new DatagramSocket(fromport);
        } catch (SocketException e) {
            e.printStackTrace();
        }

    }

    @Override
    public void run() {
        try {
            //准备数据:控制台读取System。in
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            while (true){
                String data = reader.readLine();
                byte[] datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIp, this.toport));

                socket.send(packet);
                if(data.equals("bye")){
                    break;
                }
            }
            reader.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

封装的接受短信功能:

public class TalkReceive implements Runnable {
    DatagramSocket socket = null;
    private  int fromPort;
    private  String who;
    public TalkReceive(int fromPort,String who) {
        try {
            this.who=who;
            this.fromPort=fromPort;
            this.socket = new DatagramSocket(fromPort);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {

        while (true){

            try {
                //准备接受包裹
                byte[] container = new byte[1024];

                DatagramPacket packet=new DatagramPacket(container,0,container.length);
                socket.receive(packet);
                //断开连接 bye
                byte[] data = packet.getData();
                String receiveData = new String(data, 0, data.length);
                System.out.println(who+":"+receiveData);

                if (receiveData.equals("bye")){
                    break;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        socket.close();
    }
}

学生调用线程:

public class TalkStu {
    public static void main(String[] args) {
        new Thread(new TalkSend(7777,"localhost",8888)).start();
        new Thread(new TalkReceive(9999,"老师")).start();
    }

}

老师调用线程:

public class TalkTea {
    public static void main(String[] args) {
        new Thread(new TalkReceive(8888,"学生")).start();
        new Thread(new TalkSend(6666,"localhost",9999)).start();
    }
}

9.1URL资源组成

https://i.cnblogs.com/posts/edit;postId=15426947

协议 ://ip+端口/资源

public class UrlDemo {
    public static void main(String[] args)throws  Exception {
        //1、下载地址
        URL url = new URL("https://m701.music.126.net/20211030154618/be447625f6ef20dea05fe8729de629a5/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/11106838661/b3b5/1faa/aaea/37e9f12bd03871cdc4c03b63fc974c98.m4a");
        //2、连接到这个资源
        HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
        InputStream inputStream = urlConnection.getInputStream();
        FileOutputStream fos = new FileOutputStream("37e9f12bd03871cdc4c03b63fc974c98.m4a");
        byte[] buf = new byte[1024];
        int len;
        while ((len=inputStream.read(buf))!=-1){
            fos.write(buf,0,buf.length);
            //写出这个数据
        }
    }
}

 

posted @ 2021-10-19 23:00  白小纯~  阅读(191)  评论(0)    收藏  举报