网络编程实战笔记-实现两方互相聊天

这篇博客是关于Java网络编程的学习笔记,重点介绍了TCP和UDP协议在实现两方互相聊天中的应用。从IP地址、端口号、通信协议的基础知识开始,详细讲解了TCP的三次握手、四次挥手以及UDP的无连接特性。通过实例展示了TCP的文件上传和UDP的双向通信过程,最后提到了URL在资源定位中的作用。
摘要由CSDN通过智能技术生成

1.1、概述

本博文是学习b站up主狂神的视频,狂神讲Java,所做的学习笔记

狂神:只要学不死,就往死里学

地球村


信件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LtT92ygW-1595941822421)(/Users/levi/Library/Application Support/typora-user-images/截屏2020-07-28 下午3.45.39.png)]

网络编程的目的:

  • 无线电台…
  • 传播交流信息
  • 数据交换
  • 通信

想达到效果需要什么:

  • 如何准确的定位网络上的一台主机? IP:端口号,定位到这个计算机的某个资源
  • 找到了主机,如何传输数据?

javaweb编程:网页编程 B/S

网络编程 :TCP/IP C/S

1.2、网络通信的要素

通信双方的地址:

  • ip
  • 端口号

规则:网络通信的协议

  • TCP/IP参考模型

在这里插入图片描述

1.3、IP

ip地址:InetAddress

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

127.0.0.1 本机localhost

ip地址分类:

  • ipv4/ipv6

    • IPV4 :4个字节,0~255,42亿;30亿在北美,亚洲4亿,2011年就用光了
    • IPV6 :128位,8个无符号整数!
  • 公网-私网

    • 192.168.x.x ,专门给组织内部使用

    • ABCD类地址

域名:记忆IP问题!

package com.xwy.lesson01;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * @author levi
 * @create 2020/7/28 4:14 下午
 */
public class TestIntetAddress {
   
    public static void main(String[] args) {
   
        try {
   
            //查询本机
            InetAddress Name = InetAddress.getByName("127.0.0.1");
            System.out.println(Name);

            InetAddress Name3 = InetAddress.getLocalHost();
            System.out.println(Name3);
            //查询百度地址
            InetAddress Name2 = InetAddress.getByName("www.baidu.com");
            System.out.println(Name2);
            //常用方法
           // System.out.println(Name2.getAddress());
           // System.out.println(Name2.getCanonicalHostName()); //规范名字 ip
            System.out.println(Name2.getHostAddress()); //ip
            System.out.println(Name2.getHostName()); //域名或者本机名字
        } catch (UnknownHostException e) {
   
            e.printStackTrace();
        }
    }
}

1.4 、端口

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

  • 不同端口号有不同端口号!用来区分软件

  • 被规定0~65535

  • TCP,UDP:65532*2, 不同协议的同名端口不冲突

  • 端口分类:

    • 公有端口:0~1023
      • HTTP:80
      • HTTPS:443
      • FTP:21
      • Telent:23
    • 程序注册端口:1024~49151,分配用户或程序
      • tomcat:8080
    • 动态、私有:49152~65535
    netstat -ano #查看所有端口
    netstat -ano |findstr "5900" #查看指定端口
    tasklist|findstr "5900" #查询指定端口进程
    
    package com.xwy.lesson01;
    
    import java.net.InetSocketAddress;
    
    /**
     * @author levi
     * @create 2020/7/28 4:39 下午
     */
    public class TestIntetSocketAddress {
         
        public static void main(String[] args) {
         
            InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1",8080);
            System.out.println(inetSocketAddress);
            System.out.println(inetSocketAddress.getAddress());
        }
    }
    
    • 端口映射

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sbrJeGyS-1595941822430)(/Users/levi/Library/Application Support/typora-user-images/截屏2020-07-28 下午4.43.42.png)]

1.5、通信协议

协议:约定,好比我们现在说的是普通话

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

问题:非常的复杂!

TCP/IP协议簇,实际是一组协议

重要:

  • TCP:用户传输协议
  • UDP:用户数据包协议

出名的协议:

  • TCP
  • IP:网络互联协议

TCP/UDP对比:

TCP:打电话:

  • 链接稳定
  • 三次握手、四次挥手
最少需要三次,建立稳定连接
A:你瞅啥?
B:瞅你咋地?
C:干一场

A:我要断开
B:我知道你要断开了
B:你真的要断开了吗
A:我真的要走了
  • 客户端、服务端
  • 传输完成,释放链接,效率低

UDP:发短信

  • 不链接、不稳定
  • 客户端、服务端没有明确界限
  • 不管准没准备好,都可以发给你

1.6、TCP

客户端

  • 连接服务器socket

  • 发送消息

    package com.xwy.lesson02;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /**
     * @author levi
     * @create 2020/7/28 4:54 下午
     */
    public class TcpClientDemo {
         
        public static void main(String[] args) {
         
            Socket socket = null;
            OutputStream os =null;
            //1 要知道服务器的地址
            try {
         
                InetAddress serverIp = InetAddress.getByName("127.0.0.1");
                int port = 9999;
                //2 创建socket连接
                socket = new Socket(serverIp,port);
                //3 发动消息 IO流
                os = socket.getOutputStream();
                os.write("hello xwy".getBytes());
    
            } catch (Exception e) {
         
                e.printStackTrace();
            }finally {
         
                if(os != null){
         
                    try {
         
                        os.close();
                    } catch (IOException e) {
         
                        e.printStackTrace();
                    }
                }
                if(socket != null){
         
                    try 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值