ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

网络编程

2022-01-14 09:34:39  阅读:141  来源: 互联网

标签:socket buffer 编程 端口 网络 packet new 端口号


网络编程

1.1 概述

计算机网络

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

网络编程目的

传播信息(数据交换、通信)

1.2 网络通信的要素

  • IP 和 端口号

  • 网络通信协议

1.3 IP

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

  • 127.0.0.1:本机localhost

  • ip地址的分类(IPV4 / IPV6)

  • 域名:记忆IP问题

1.4 端口

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

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

  • 被规定 0 - 65535

  • (TCP) (UDP) 单个协议下,端口号不能冲突

  • 端口分类

    • 公用端口 0 - 1023

      • HTTP: 80

      • HTTPS: 443

      • FTP: 21

    • 程序注册端口 1024 - 49151,分配给用户或者程序

      • Tomcat: 8080

      • MySQL: 3306

      • Oracle: 1521

    • 动态、私有端口 49152 - 65535

       netstat -ano #查看所有端口
       netstat -ano|findstr "端口号" #查看指定端口
       tasklist|findstr "PID" #查看指定端口进程
       Ctrl + Shift + Esc 快速打开任务管理器

1.5 通信协议

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

TCP:打电话

  • 连接,稳定

  • 三次握手 四次挥手

     A:你瞅啥
     B:瞅你咋地
     A:干一场
     ​
     A:我要走了
     B:你真的要走了吗
     B:你真的真的要走了吗
     A:我真的要走了

     

UDP:发短信

  • 不连接,不稳定

1.6 TCP

客户端

  1. 连接服务器Socket

  2. 发送消息

 //1.连接服务器
 //获取服务端IP和端口号
 InetAddress serverIP = InetAddress.getByName("localhost");
 int port = 9999;
 //创建一个Socket连接
 socket = new Socket(serverIP, port);
 ​
 //2.发送消息
 os = socket.getOutputStream();
 os.write("客服端向服务端发送消息".getBytes());

 

服务端

  1. 建立服务的端口

  2. 等待用户的连接

  3. 接受用户的消息

  //1.创建服务的端口
 serverSocket = new ServerSocket(9999);
 ​
 while (true) {
     //2.等待用户的连接
     socket = serverSocket.accept();
 ​
     //3.接受用户的消息
     is = socket.getInputStream();
     byte[] buffer = new byte[1024];
     int len;
     baos = new ByteArrayOutputStream();
     while ((len = is.read(buffer)) != -1) {
         baos.write(buffer, 0, len);
    }
     System.out.println(baos);
 }

Tomcat

服务端

  • 自定义 S

  • Tomcat服务器 S :Java后台开发

客户端

  • 自定义 C

  • 浏览器 B

1.7 UDP

发送端

 public class SendDemo01 {
     public static void main(String[] args) throws IOException {
         //1.创建数据包Socket
         DatagramSocket socket = new DatagramSocket(9998);
         //2.创建数据报包
         String massage = "数据报包";
         DatagramPacket packet = new DatagramPacket(massage.getBytes(), 0,
                 massage.getBytes().length, InetAddress.getByName("127.0.0.1"), 9999);
         //3.发送数据报包
         socket.send(packet);
         //4.关闭资源
         socket.close();
    }
 }

 

接收端

 public class ReceiveDemo01 {
     public static void main(String[] args) throws IOException {
         //1.创建服务的端口
         DatagramSocket socket = new DatagramSocket(9999);
         //2.接收数据报包
         byte[] buffer = new byte[1024];
         DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
         socket.receive(packet);
         //3.输出数据报包
         System.out.println(packet.getAddress().getHostAddress());
         System.out.println(new String(packet.getData(), 0, packet.getLength()));
         //4.关闭资源
         socket.close();
    }
 }

1.8 URL

统一资源定位符:定位资源(本地,互联网)

DNS域名解析

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

 

标签:socket,buffer,编程,端口,网络,packet,new,端口号
来源: https://www.cnblogs.com/yanglf-blog/p/15800560.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有