【笔记:Java网络编程】

Java讲课笔记34:网络编程 1. 理解IP地址和端口号的作用 2. 掌握InetAddress对象的基本使用 3. 掌握UDP和TCP通信的基本实现 4. 了解网络通信协议 阅读详情

一、网络编程

1.1概述

计算机网络

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

1.2 网络通信的要素

通讯双方地址:

  • ip
  • 端口号

规则:网路通信协议

TCP/IP

image.png

1.3 IP

IP地址:InetAddress

  • 唯一定位一台网络上计算机

  • 127.0.0.1 : 本机 localhost

  • ip地址分类

    • IPV4/IPV6

      • IPV4:127.0.0.1,四字节组成,0~255,共42亿;30亿在北美,亚洲4亿,2011年用尽

      • IPV6:fe80::7000:f2bb:1767:eccc%8 , 128位,8个无符号整数

        一、冒分十六进制表示法

        格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示,例如:

        ABCD:EF01:2345:6789:ABCD:EF01:2345:6789

        这种表示法中,每个X的前导0是可以省略的,例如:

        2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A

        二、0位压缩表示法

        在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:

        FF01:0:0:0:0:0:0:1101 → FF01::1101

        0:0:0:0:0:0:0:1 → ::1

        0:0:0:0:0:0:0:0 → ::

        三、内嵌IPv4地址表示法

        为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用 [9]

    • 公网(互联网)/私网(局域网)

      • 192.168.xx.xx:专门给组织内部使用
      • ABCD类地址
  • 域名:记忆IP问题

    • IP:www.bilibili.com
//测试IP
public class TestInetAdress {
    public static void main(String[] args) {
        try {
            //查询本机地址
            InetAddress byName = InetAddress.getByName("127.0.0.1");
            System.out.println(byName);//127.0.0.1
            InetAddress byName2 = InetAddress.getByName("localhost");
            System.out.println(byName2);//localhost/127.0.0.1
            InetAddress byName3 = InetAddress.getLocalHost();
            System.out.println(byName3);//DESKTOP-7OMFADN/192.168.1.107
            //查询网站ip地址
            InetAddress byName1 = InetAddress.getByName("www.baidu.com");
            System.out.println(byName1);//www.baidu.com/14.215.177.38

            //常用方法
            System.out.println(byName1.getCanonicalHostName());
            //14.215.177.39(规范的名字)
            System.out.println(byName1.getHostAddress());
            //14.215.177.39(ip)
            System.out.println(byName1.getHostName());
            //www.baidu.com(域名,或自己电脑的名字)

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

1.4 端口

端口表示计算机上的一个程序的进程

  • 不同的进程有不同的端口号,用来区分软件

  • 被规定0~65535

  • TCP、UDP:一共65535*2(tcp:80、udp:80时不冲突),单个协议下,端口号不能冲突

  • 端口分类:

    • 共有端口:0~1023

      • HTTP:80
      • HTTPS:443
      • FTP:21
      • Telent:23
    • 程序注册端口:1024~49151,分配用户或程序

      • Tomcat:8080
      • MySQL:3306
      • Oracle:1521
    • 动态、私有端口:49152~65535

      netstat -ano	#查看所有的端口
      netstat -ano|findstr "5900"	#查看指定端口
      tasklist|findstr "8096"	#查看指定端口的进程
      

1.5 通信协议

**网络通信协议:**速率、传输码率、代码结构、传输控制…

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

  • TCP:用户传输协议
  • UDP:用户数据报协议
  • IP:网络互连协议

TCP、UDP对比:

TCP:

  • 连接、稳定

  • 三次握手 四次挥手

    三次挥手(最少需要三次,保证稳定连接)

    A:你愁啥(发送)

    B:瞅你咋地(回复)

    A:干一架!(连接)

    四次挥手

    A:我要断开了

    B:好的,稍等一下

    B:你断吧

    A:好的,我断了

  • 客户端、服务端

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

UDP:

  • 不连接、不稳定
  • 客户端、服务端:没有明确的界限
  • 无论是否准备好,都可以发送
  • DDOS:洪水攻击(饱和攻击)

三次握手,四次挥手

1.6 TCP

客户端:C

  1. 连接服务器Socket
  2. 发送消息
package TCPtest;

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

//客户端
public class TcpClientDemo1 {
    public static void main(String[] args){
        Socket socket = null;
        OutputStream os = null;

        try {
            //1.要知道服务器地址、端口号
            InetAddress serverIP = InetAddress.getByName("127.0.0.1");
            int port = 9999;
            //2.创建一个socket连接
            socket = new Socket(serverIP, port);
            //3.发送消息
            os = socket.getOutputStream();
            os.write("你好".getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (os != null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

服务端:S

  1. 建立服务端口 SeverSocket
  2. 等待用户的连接 accept
  3. 接受消息
public class TcpServerDemo1 {
    public static void main(String[] args){
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream is = null;
        ByteArrayOutputStream baos = null;

        try {
            //1.需要一个地址
            serverSocket = new ServerSocket(9999);
            //2.等待客户端连接进来
            while (true) {
                socket = serverSocket.accept();
                //3.读取客户端的消息
                is = socket.getInputStream();
                //管道流
                baos = new ByteArrayOutputStream();
                byte[] buffer =new byte[1024];
                int len;
                while((len = is.read(buffer))!=-1){
                    baos.write(buffer,0,len);
                }
                System.out.println(baos.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (baos != null){
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (serverSocket != null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

文件上传

服务器端

package TCPtest;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class TcpServerDemo1 {
    public static void main(String[] args){
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream is = null;
        ByteArrayOutputStream baos = null;

        try {
            //1.需要一个地址
            serverSocket = new ServerSocket(9999);
            //2.等待客户端连接进来
            while (true) {
                socket = serverSocket.accept();
                //3.读取客户端的消息
                is = socket.getInputStream();
                //管道流
                baos = new ByteArrayOutputStream();
                byte[] buffer =new byte[1024];
                int len;
                while((len = is.read(buffer))!=-1){
                    baos.write(buffer,0,len);
                }
                System.out.println(baos.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (baos != null){
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (serverSocket != null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

客户端

package demo2;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Locale;

public class TcpClientDemo2 {
    public static void main(String[] args) throws  Exception {
        //创建一个socket连接
        int port = 9000;
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
        //创建一个输出流
        OutputStream os = socket.getOutputStream();
        //文件流
        FileInputStream fis = new FileInputStream(new File("猫猫.jpg"));
        //写出文件
        byte[] buffer = new byte[1024];
        int len;
        while((len = fis.read(buffer)) != -1){
            os.write(buffer,0,len);
        }
        //通知服务器,我已经结束了
        socket.shutdownOutput();

        //确定服务器接收完毕,才能断开连接
        InputStream inputStream = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] buffer2 = new byte[1024];
        int len2;
        while ((len2 = inputStream.read(buffer2))!= -1){
            baos.write(buffer2,0,len2);
        }
        System.out.println(baos.toString());

        //关闭资源
        baos.close();
        fis.close();
        os.close();
        socket.close();
    }
}

Tomcat

服务端

  • Tomcat服务器 S

客户端

  • 浏览器 B

1.7 UDP

(发短信):不用连接,需要知道对方地址

发送消息

发送端

package demo3;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

//不需要连接服务器
public class UdpClientDemo1 {

    public static void main(String[] args) throws Exception {
        //1.建立一个Socket
        DatagramSocket socket = new DatagramSocket();

        //2.创建包
        String msg = "你好,服务器。";
        //发送给谁
        InetAddress localhost = InetAddress.getByName("localhost");
        int port = 9090;
        //数据、数据的起始长度、发送给谁
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);

        //3.发送包
        socket.send(packet);

        //4.关闭流
        socket.close();
    }
}

接收端

package demo3;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

//还是要等待客户端的连接
public class UdpServerDemo1 {
    public static void main(String[] args) throws Exception {
        //开放端口
        DatagramSocket socket = new DatagramSocket(9090);
        //接受数据包
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
        socket.receive(packet);//阻塞接收

        System.out.println(packet.getAddress().getHostAddress());
        //127.0.0.1

        System.out.println(new String(packet.getData(), 0, packet.getLength()));
        //你好,服务器。

        socket.close();
    }
}

咨询

循环发送消息

发送方

package chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;


public class UdpSenderDemo01 {
    public static void main(String[] args) throws Exception {

        DatagramSocket socket = new DatagramSocket(8888);
        //准备数据:控制台 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("localhost", 6666));
            socket.send(packet);
            if (data.equals("bye")) break;
        }
        socket.close();
    }
}

接收方

package chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpReceiveDemo01 {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(6666);

        while (true) {
            //准备接受的包裹
            byte[] container = new byte[1024];
            DatagramPacket packet = new DatagramPacket(container,0,container.length);

            socket.receive(packet);//阻塞式接收包裹

            //断开连接 bye
            byte[] data = packet.getData();
            String datas = new String(data, 0, data.length);
            System.out.println(datas);
            if (datas.equals("bye")) break;
        }
        socket.close();
    }
}

在线咨询:两个人都可以是发送方,也都可以是接收方!

发送线程

package chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class TalkSend implements Runnable  {

    DatagramSocket socket = null;
    BufferedReader reader = null;

    private int fromPort;
    private String toIP;
    private int toPort;

    public TalkSend(int fromPort, String toIP, int toPort) {
        this.fromPort = fromPort;
        this.toIP = toIP;
        this.toPort = toPort;

        try {
            socket = new DatagramSocket(fromPort);
            reader = new BufferedReader(new InputStreamReader(System.in));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {

        while (true) {
            try {
                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;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}

接收线程

package chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable{

    DatagramSocket socket = null;

    private int port;
    private String msgFrom;

    public TalkReceive(int port, String msgFrom) {
        this.port = port;
        this.msgFrom = msgFrom;
        try {
            socket = new DatagramSocket(port);
        } 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 datas = new String(data, 0, data.length);
                System.out.println(msgFrom + "发送:" + datas);
                if (datas.equals("bye")) break;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}

用户1

package chat;

public class TalkStudent {
    public static void main(String[] args) {
        //开启两个线程
        new Thread(new TalkSend(7777,"localhost",9999)).start();
        new Thread(new TalkReceive(8888,"老师")).start();
    }
}

用户2

package chat;

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

1.8 URL

https://www.baidu.com/

统一资源定位符:定位资源的,定位互联网上的某一资源

DNS域名解析:https://www.baidu.com/ -> xxx.x…x…x

协议://ip地址: 端口/项目名/资源

url常用方法

package demo4;

import java.net.MalformedURLException;
import java.net.URL;

public class URLDemo01 {
    public static void main(String[] args) throws MalformedURLException {
        URL url = new URL("https://localhost:8080/helloworld/index.jsp?username=name&password=123");
        System.out.println(url.getProtocol());//协议
        System.out.println(url.getHost());//主机ip
        System.out.println(url.getPort());//端口
        System.out.println(url.getPath());//文件
        System.out.println(url.getFile());//全路径
        System.out.println(url.getQuery());//参数
        /*
        https
        localhost
        8080
        /helloworld/index.jsp
        /helloworld/index.jsp?username=name&password=123
        username=name&password=123
         */
    }
}

URL下载网络资源

package demo4;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class UrlDown {
    public static void main(String[] args) throws IOException {
        //1.下载地址
        URL url = new URL("https://profile-avatar.csdnimg.cn/34b48fd47a9141c3ac2964d1ef2166aa_editplusplusplus.jpg!1");

        //2.连接到这个资源
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        InputStream inputStream = urlConnection.getInputStream();

        FileOutputStream fos = new FileOutputStream("34b48fd47a9141c3ac2964d1ef2166aa_editplusplusplus.jpg");

        byte[] buffer = new byte[1024];
        int len;
        while((len=inputStream.read(buffer))!=-1){
            fos.write(buffer,0,len);
        }
        fos.close();
        inputStream.close();
        urlConnection.disconnect();
    }
}
LabVIEW内存优化实战:用DVR和队列高效处理大型数组,告别数据副本 本文深入探讨LabVIEW内存优化技术,重点介绍数据值引用(DVR)和单元素队列(SEQs)在高效处理大型数组中的应用。通过对比传统方法与现代引用技术的性能差异,提供减少内存副本、提升程序效率的实战方案,帮助开发者在测试测量、图像处理等数据密集型场景中实现显著性能提升。 阅读详情

相关推荐

用MFRC522+STM32打造智能门禁:从硬件选型到云端控制全流程

本文详细介绍了基于STM32微控制器和MFRC522射频模块构建智能门禁系统的完整流程。从硬件选型、电路设计、底层驱动开发,到系统软件架构与状态机设计,并最终实现通过ESP8266模块接入云端平台(如OneNET)进行远程控制和数据可视化。项目深入探讨了MFRC522的SPI通信、卡片操作流程、天线调试以及云端MQTT集成等关键技术,为嵌入式开发者提供了一个从本地感知到云端管控的物联网项目实战参考。

raspberrypi5的博客 741

Java网络编程(Java学习笔记十一)

尚硅谷Java课程学习笔记。

一只黑猩猩 694

桑基图实战指南:Excel/Python/R三工具高效绘制方法

桑基图是一种以线条宽度编码流量大小、以节点位置表达流程阶段、以连接关系呈现数据流向的专项可视化技术,其核心原理在于‘宽即量、位即序、连即逻辑’。它并非装饰性图表,而是面向业务诊断的分析前置工具,尤其适用于预算分配、能源损耗、用户转化等存在明确单向流动与显著数值差异的场景。相比传统柱状图或漏斗图,桑基图能天然暴露系统瓶颈与隐性损耗,大幅提升决策效率。本文聚焦工程落地,覆盖Excel插件快速交付、Python Plotly交互开发、R networkD3生态集成三大主流路径,兼顾数据准备铁律、索引映射规范与中文

cuml0912的博客 488

socket.shutdownOutput()的理解

看某神视频的时候,发现不用socket.shutdownOutput()服务端就会被阻塞,阻塞在如下代码块中: 后面想了下,其实在客户端代码中不调用socket.close()也会导致阻塞。 说回到客户端,如果不加如下代码就会阻塞。因为服务器会一直等待客户端的输出。既然服务器阻塞了,客户端等待着服务器的输出,也会被阻塞,所以导致客户端和服务端都被阻塞。 调用Socket.shutdownOutput()方法后,客户端输出的数据都将被发送,并加上 TCP 的正常连接终止序列(-1,也就是服务端终

u011403239的博客 1万+

使用单片机开发PWM的案例&相关项目源码

该项目使用STM32单片机生成PWM信号,通过改变PWM的占空比来控制连接在PWM输出引脚(如PA0)上的LED的亮度。在主循环中,通过改变比较值,PWM信号的占空比在0%到100%之间变化,从而实现LED亮度的渐变效果。这个项目是一个基础的PWM控制示例,通过学习和实践这个项目,可以掌握PWM的基本原理和使用方法,并为进一步开发和应用打下良好的基础。该项目实现了使用STM32单片机产生PWM信号,并通过改变PWM的占空比来控制LED的亮度。配置PWM输出引脚(如PA0),确保其模式为PWM输出。

清风明月 643

保姆级教程:用sw_urdf_exporter插件将Solidworks机械臂模型转为ROS可用的URDF

本文提供了一份详细的保姆级教程,指导用户使用sw_urdf_exporter插件将Solidworks机械臂模型转换为ROS可用的URDF文件。从环境准备、插件配置到模型预处理和关键参数设置,再到ROS环境集成测试和性能优化,全面覆盖了机械臂URDF转换的全流程。特别适合机器人工程师和ROS开发者快速实现Solidworks模型到ROS环境的无缝迁移。

weixin_29300931的博客 401

java shutdowninput,关于socket 关闭shutdownOutput,shutdownInput问题的简述

关于socket 的shutdownOutput,shutdownInput问题的简述我们在使用Java socket 进行发消息一般会用outputStream = socket.getOutputStream();printWriter = new PrintWriter(outputStream);printWriter.print(info");printWriter.flush();so...

weixin_35720618的博客 1401

C#实战:通过ZPL指令与斑马打印机交互及状态监控全解析

本文全面解析了在C#中通过ZPL指令与斑马打印机进行交互及状态监控的实战方法。文章详细介绍了TCP/IP网络打印和Windows Raw打印两种核心连接方式,并深入讲解了ZPL指令的构建。重点阐述了通过SGD命令和斑马官方SDK实现实时打印状态监控的策略,为工业自动化场景下的可靠打印提供了完整解决方案。

weixin_29294395的博客 117

网络编程(十二)

文章目录网络编程概述网络基础网络通信要素通信要素1:IP和端口号IP 地址端口号代码层面 InetAddress类通信要素2:网络通信协议TCP/IP协议簇TCP 和 UDPSocketSocket类的常用构造器:Socket类的常用方法:TCP网络编程基于Socket的TCP编程客户端Socket的工作过程包含以下四个基本的步骤:客户端创建Socket对象服务器程序的工作过程包含以下四个基本的步...

weixin_45497607的博客 924

NoUnityCN:绕过地域限制,从Unity官方CDN直链下载全版本编辑器

在软件开发和游戏制作领域,内容分发网络(CDN)是保障全球用户高速、稳定获取大型文件的核心基础设施。其原理是通过将资源缓存至遍布各地的边缘节点,使用户能从地理距离最近的服务器获取数据,从而显著提升下载速度并降低源站压力。这一技术对于需要频繁下载大型开发工具(如游戏引擎)的团队而言,价值在于能确保开发环境部署的一致性与效率,是构建自动化CI/CD流水线和团队协作的基础。然而,当开发者因网络策略或地域限制无法直接访问官方CDN时,获取安装文件便成为阻碍工作流的痛点。NoUnityCN项目正是针对此场景的工程实践

weixin_33473110的博客 317

【C语言】一文搞懂C语言文件操作

读写文件、文件相关库函数详解、文件缓冲区介绍

StackFrame 5661

Java笔记:网络编程

网络编程、网络通信

Alice_Lee_Lee的博客 378

用MSBlock重塑C2f,让你的模型又轻又强(参数量与精度的双重突破)

打开确保模型解析器能识别MSBlock模块。通过将MSBlock集成到YOLOv8的C2f模块中,我们实现了一个“轻量且多尺度感知”的目标检测模型。这个改进不仅在工程上能降低部署成本、提升推理速度,更在科研上提供了“多尺度+动态核”的创新思路——这种思路可以延伸到其他网络(如ResNet、MobileNet)的改进中,帮你在论文中打造独特的研究点。如果你在实现过程中遇到问题,比如代码报错、训练收敛异常,可以先检查模块集成的每一步是否到位,再尝试调整MSBlock的卷积核尺寸、动态权重的计算方式等超参数。

m0_71589036的博客 106

JAVA笔记:网络编程

文章目录一、网络编程入门1.1 软件结构1.2 网络通信协议1.3 协议分类1.4 网络编程三要素协议IP地址端口号二、TCP通信程序2.1 概述2.2 Socket类2.3 ServerSocket类三、综合案例3.1 TCP通信的文件上传案例3.2 TCP通信的文件上传案例优化3.3 模拟B\S服务器 一、网络编程入门 1.1 软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :全称为Browser/Server结构,是指浏

weixin_44489825的博客 146

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java学习笔记:网络编程详解

Java学习笔记:网络编程详解

weixin_46619605的博客 869

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java学习笔记:网络编程

java学习笔记:网络编程 第二部分 网络编程 一、基本概念介绍 1.网络三要素 :IP地址,端口,协议 TCP:Transmission Control Protocol 传输控制协议 IP:Internet Protocol 因特网互联协议 2.网络模型简介 TCP/IP协议组的层次结构 : OSI(Open System Interconnection开放系统互连)参考模型...

黄道婆的专栏 261

Java 网络编程实战笔记:BIO、NIO、AIO

Java 网络编程学习笔记 前置概念 Java IO 模型 IO 模型 对应的 Java 版本 BIO(同步阻塞 IO) 1.4 之前 NIO(同步非阻塞 IO) 1.4 AIO(异步非阻塞 IO) 1.7 Linux 内核 IO 模型 阻塞 IO 最传统的一种 IO 模型,在读写数据过程中会发生阻塞。 当用户线程发出 IO 请求后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。当数据就绪之后,内核会将数据拷贝到用户

qq_41112238的博客 808

JavaSE学习笔记_20:Java网络编程

Java网络编程     温馨提示1: (1)网络编程这一块会涉及到很多不同异常,得抛。 (2)涉及到iO,还是按照iO的思想来解决问题。 (3)接收端和发送端或者是服务端和客户端程序开启之后,两者的程序可以看 成是在相互切换着执行。因为程序中有阻塞式方法。     温馨提示2: 网络编程一般都是和io一起用,那么io有好多个对象。这里简单的记忆一下: 字符流: (1)不加

java_cm66的博客 2229

笔记总结:Java核心——网络编程

java网络编程总结

lzf240286的博客 137

笔记:第八讲 Java网络编程

from:http://www.itlearner.com/课前思考  1. 什么是TCP/ IP协议?  2. TCP/IP有哪两种传输协议,各有什么特点?  3. 什么是URL?  4. URL和IP地址有什么样的关系?  5. 什么叫套接字(Socket)?  6. 套接字(Socket)和TCP/IP协议的关系?  7. URL和套接字(Socket)的关系?8.1 网络编程基本概念,

Javan05s 1314

Java系列笔记第七章:Java基础网络编程

本文目录第七章 : Java基础网络编程1. 网络编程入门1.1 软件结构1.2 网络通信协议1.3 网络编程三要素2. TCP通信程序2.1 概述2.2 TCP客户端代码实现2.3 TCP服务端代码实现3. 文件上传示例3.1 文件上传3.2 文件上传的阻塞问题4. 文件上传的多线程优化4.1 文件名称4.2 服务端多线程监听并接收客户端的套接字5. 模拟B/S结构的服务端 第七章 : Java基础网络编程 1. 网络编程入门 1.1 软件结构 C/S结构与B/S结构。 1.2 网络通信协议 专注于研究传

soldersun的博客 283

java基础_网络编程_笔记:

20201020笔记: 网络编程: InetAddress类: ​ 构造方法不是public,只能使用它的方法。 常用方法: ​ InetAddress.getLocalHost(); 返回本机主机的地址,返回一个InetAddress对象 ​ InetAddress.getByName(“www.baidu.com”); //通过域名 ​ InetAddress.getByName(“103.235.46.39”);//通过地址 ​ InetAddress实例对象.getHostAddres

qq_43517448的博客 223

【Java笔记】(六):网络编程

什么是网络编程 在网络通信协议下,实现网络互联的不同计算机上运行的程序可以进行资源交换,简而言之,用户之间可以发送消息或文件 网络编程三要素 IP地址 IP地址是网络中设备的唯一标识,分为IPv4和IPv6两大类,我们使用IPv4进行网络通信,它采用点分十进制表示法,一般长这样192.168.99.1,127.0.0.1可以代表本机地址,一般用于测试 命令 说明 ipconfig 查看本机IP ping IP 检查网络是否连通 端口 网络的通信本质上是两个应用程序的通信,每台计算机

一条小黑龙的博客 245

【Java笔记】No10.Java网络编程详解:从基础到实战

Java网络编程核心基于java.net包,TCP使用实现面向连接的可靠通信,UDP使用实现无连接的高效通信;基础TCP服务器仅支持单客户端,实际应用中需结合多线程实现多客户端并发处理;网络编程需重点关注资源管理、异常处理和并发控制,遵循try-with-resources、明确编码等最佳实践。Java网络编程是构建分布式应用、网络服务的基础,掌握上述核心技术后,可进一步学习NIO、Netty等高性能网络编程框架,满足高并发、高性能的业务需求。

勿忘初心方得始终 453

java学习笔记Day12:网络编程

1.网络编程(代码简单,但是深入复杂) 1.1网络编程概述 1.1.1分类 网络编程:BIO,NIO,AIO BIO(基础):阻塞通讯(数据流有上限,要等上一批释放) (1) 在通讯的过程当中,必然存在一个是发送方,一个是接收方 (2) 发送数据之前,首先要明确目标服务器的地址(IP/域名) (3) 为了方便记忆网络地址,所以域名应运而生,通过DNS服务器来进行解析;一个服务器,提供了一个庞大的MAP,KEY就是域名(domain),VALUE就是IP。 note:网上有免费的服务器 (4) 首先访问的是本

至臻至善 369

Java学习笔记(十二):网络编程

网络编程 一、网络概述 国际标准化组织于1978年提出OSI(Open System Interconnection),即开放系统互连参考模型 开放系统互连参考模型把计算机网路网络分成物理层、数据链路层、网路层、传输层、会话层、表示层、应用层七层 IP(Internet Protocol)协议又称为互联网协议,TCP(Transmission Control Protocol)协议又称为传输控制协议 TCP/IP协议将网络分成物理+数据链路层、网络层、传输层、应用层四层 IP地址用于唯一地标识网络中的一个

Nujabes的博客 208

《疯狂java讲义》读书笔记(八):网络编程

《疯狂java讲义》读书笔记(八):网络编程 网络编程的一些基础在本篇读书笔记中较少涉及,在理解TCP和UDP的时候,最好还是有些知识储备,这学期学完了计算机网络,再看一遍书,又加深了印象。 ​ 关于网络编程这块儿,书上很多都是例子为主,在这一节的读书笔记,结合大二学的一些东西和大三学的一些专业课来写,并不是完全意义上的《疯狂java讲义》读书笔记。 ​ 在这节的读书笔记里,主要从3个方面去介...

NayelyA的博客 294
上一篇: 【Lambda表达式】
下一篇: 【笔记:Java/GUI】
莱布尼杰
博客等级 码龄9年 3粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值