IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java 网络编程学习笔记11.23 -> 正文阅读

[Java知识库]Java 网络编程学习笔记11.23

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,

通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,

实现资源共享信息传递的计算机系统.

目的是什么

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

需要什么

IP和端口号

网络通讯协议


IP地址

ip地址:InetAddress

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

IP地址的分类:

ipv4 / ipv6

????????????????IPV4 127.0.0.1,四个字节组成,0~255,分布不均匀

????????????????IPV6 2001: 0bb2: aaaa: 0012: 1231: ffff,128位,8个无符号整数

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

使用:? ?

没有构造器,只能通过静态方法返回值

定义一个InetAddress对象,等于一个IP地址.


端口? ? ? ??

端口用来区分软件.0~65535,不同的进程有不同的端口号.

协议分为TCP与UDP,单个协议下,端口号不能冲突

端口分为公有端口0~1023,程序注册端口2014~49151,动态与私有端口


通信协议

元素:速率,传输码率,代码结构,传输控制

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

? ? ? ? TCP用户传输协议

????????????????(打电话,连接稳定,三次握手,四次挥手)

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

? ? ? ? UDP用户数据报协议

????????????????(发短信,不连接,不稳定)

? ? ? ? ? ? ? ? (无论对方如何,都发过去)


TCP(客户端与服务端)

服务端创建服务,然后接受传过来的socket

public class server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(9999);//建立服务
            Socket socket = serverSocket.accept();//可以认为是传过来的socket

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

客户端创建连接

public class client {
    public static void main(String[] args) {
        try {
            InetAddress ia = InetAddress.getByName("127.0.0.1");
            int port = 9999;
            Socket socket = new Socket(ia,port);//连接服务器
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

TCP实现聊天

服务端

public class server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(9999);//创建服务
            Socket socket = serverSocket.accept();//可以认为是传过来的socket

            //以下为IO流操作
            InputStream is = socket.getInputStream();
            //byte[] buffer = new byte[1024];
            /*
            while((len=is.read(buffer))!=-1){//read会先全写进buffer
                String text = new String(buffer,0,len);//由于这里都当字符,导致中文错乱
                System.out.println(text);
            }
            */
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len;
            while((len=is.read(buffer))!=-1){
                baos.write(buffer,0,len);//继续把2进制文件写到baos流中
            }
            System.out.println(baos.toString());

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

客户端

public class client {
    public static void main(String[] args) {
        try {
            InetAddress ia = InetAddress.getByName("127.0.0.1");
            int port = 9999;
            Socket socket = new Socket(ia,port);//连接服务

            //以下为IO流操作
            OutputStream os = socket.getOutputStream();//指定对象
            os.write("HelloWorld".getBytes(StandardCharsets.UTF_8));//写入信息
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

UDP

不需要连接服务器

客户端发包

public class UdpClient {
    public static void main(String[] args) throws Exception{
        //建立一个Socket
        DatagramSocket socket =new DatagramSocket();
        //建立一个包
        String msg = "你好";
        InetAddress ia = InetAddress.getByName("127.0.0.1");
        int port = 9090;
        DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,ia,port);
        //发送包
        socket.send(packet);
    }
}

服务端接包

public class UdpServer {
    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);

        socket.close();
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 07:48:53  更:2021-11-24 07:50:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:04:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码