首页 > 编程语言 >Java——网络编程

Java——网络编程

时间:2023-11-22 21:36:17浏览次数:32  
标签:Java Socket 编程 端口 网络 客户端 数据包 端口号 服务器端

一、概述

  就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换

  网络模式一般是指

          OSI参考模型

          TCP/IP参考模型

  

网络通信三要素

    IP地址:InetAddress

      网络中设备的标识,不易记忆,可用主机名

    端口号

      用于标识进程的逻辑地址,不同进程的标识

    传输协议

      通讯的规则

      常见协议:TCP/UDP

二、IP地址

  java提供了一个类来描述ip地址InetAdress

  这个类没有构造方法,一部分还是非静态的

  但是,部分静态方法的返回值类型就是InetAdress,可以通过调用静态的方法来获取该类对象,然后再调用非静态的方法 

  

  static InetAddressgetByName(String host) 确定主机名称的IP地址。

  getHostName 获取主机名

  getHostAddress 获取ip地址

三、端口号

  1)物理端口 网卡口

  2)逻辑端口(我们指的就是逻辑端口)

    每个网络程序都会至少有一个逻辑端口

    用于标识进程的逻辑地址,不同进程的标识

    有效端口:0~65535,其中0~1024系统使用或保留端口

    通过netstat -ano可以查看端口号

四、UDP协议

  将数据源和目的封装成数据包中,不需要建立连接;每个数据包的大小限制在64k;

  因无连接,是不可靠协议;   

  不需要建立连接,速度快

Socket

  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一识别的标识符套接字

  原理机制

    通信的两端都有Socket

    网络通信其实就是Socket间的通信

    数据在两个Socket间通过IO传输

  

 

发送端发送数据

  1.创建Socket对象,java中对udp协议提供了一个类DatagramSocket

  2.将要发送的数据封装成数据包,java提供了一个类DatagramPacket表示数据包

  3.将数据包发送出去

  4.关闭资源

 

  DatagramSocket()   构造数据报套接字并将其绑定到本地主机上的任何可用端口

  DatagramPacket(byte[] buf, int length, InetAddress address, int port)   构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。

  byte[] buf   -- 这个其实就是数据的字节数组的形式

  length   -- 数据字节数组的长度

  address   -- 目标的ip地址,需要将其封装成一个InetAddress的对象

  port   -- 接收端绑定的端口号

  

  将数据包发送出去
  ds.send(dp);

  关闭资源
  ds.close();

接收端接受数据

  1.创建接收端的Socket对象

  2.创建一个空的数据包,用于接收发送端发送过来的数据

  3.调用方法接收数据,数据将会被存储到上面创建的数据包中

  4.解析数据包,得到接收到的数据

  5.关闭资源

 

DatagramSocket(int port)  //构造数据报套接字并将其绑定到本地主机上的指定端口。

DatagramPacket(byte[] buf, int length)  //构造一个 DatagramPacket用于接收长度的数据包 length

五、TCP传输

  Socket和ServerSocket

  建立客户端和服务器端

  建立连接后,通过Socket中的IO 流进行数据的传输

  关闭socket

  同样,客户端和服务器端是两个独立的应用程序

客户端

  

注意事项

  客户端的Socket对象需要执行服务器的ip地址和端口号,服务器端的Socket对象需要绑定一个端口号

  客户端和服务器端需要获取通道中的流,来进行输入或者输出

  启动的时候要先启动服务器端

服务器端

 

注意

  read方法或者readline方法是阻塞式
  socket.shutdownOutput();  自定义结束标记   注意:只有当明确不会再写数据的时候才会杀死

  服务器端的accept()方法每调用一次只能允许一个客户端的连接

  

标签:Java,Socket,编程,端口,网络,客户端,数据包,端口号,服务器端
From: https://www.cnblogs.com/black-rosebush/p/17850339.html

相关文章

  • 2024年面向Java程序员的20个系统和软件设计面试题
    0前言系统设计问题是编程面试的重要组成部分,如果你想取得好成绩,就必须准备。在我的网站,分享了八股面试题时,也分享了一些系统设计问题,但粉丝们一直在要求更多问题,因为这个主题的确很难掌握,需要更多练习。我自己也收集了一些从朋友和同事那里获得的面试题,但为了这篇文章和自己的准......
  • 访问不同BMC时使用不同的java版本
    因项目里的服务器较多,bmc版本不一致,总会需要java1.7,部分需要1.8.总是删除安装太麻烦了,深度着同时安装多个java版本,然后使用哪个版本时,切换一下就好了。java控制面板,java,查看,使用哪个就给哪个打对号。......
  • Java排序实战:如何高效实现电商产品排序
    在当今的数字化时代,电子商务已成为人们日常生活的重要组成部分。消费者可以在电商平台上浏览和购买来自全球的商品,这无疑为我们的生活带来了极大的便利。然而,随着电商平台的规模不断扩大,商品数量的急剧增加,如何对海量商品进行高效排序成为了电商系统开发的一大挑战。一、排序的重......
  • 入门 Dart 编程:为 Flutter 开发应用打下基础 审核中
    前言:Dart是一门现代化的、多用途的编程语言,最为广泛应用于移动应用开发中的Flutter框架。本篇博客旨在为初学者提供Dart编程的基础概念,为进一步探索Flutter开发打下坚实基础。DartPad演示......
  • 2023-2024-1 20232327《网络空间安全导论》第二周学习总结
    2023-2024-120232327《网络空间安全导论》第二周学习总结教材学习内容总结1.密码学历史悠久,主要分为古典密码、机械密码和线代密码;2.密码学研究主要有密码分析,密码理论,密码工程与应用以及密码管理;3.密码体制的分类:单钥密码体制和双钥密码体制;4.密码分析方法有穷举攻击法、......
  • Java排序实战:如何高效实现电商产品排序
    在当今的数字化时代,电子商务已成为人们日常生活的重要组成部分。消费者可以在电商平台上浏览和购买来自全球的商品,这无疑为我们的生活带来了极大的便利。然而,随着电商平台的规模不断扩大,商品数量的急剧增加,如何对海量商品进行高效排序成为了电商系统开发的一大挑战。一、排序的重......
  • Java——设计模式
    一、概述设计模式是历代程序员总结出的经验二、分类创建型模式:简单工厂模式工厂方法模式单例模式:饿汉式(开发)懒汉式(面试)行为型模式结构型模式三、简单工厂模式一个工厂中可以创建很多各种各样的对象缺陷:如果有新......
  • java时间截和日期格式相互转换的方法
    1.日期格式图片展示2.时间戳图片展示 ......
  • 探索数字世界的路标:IP地址、子网掩码与网络类别
    IPv4使用32位的数字来表示一个网络地址。在IPv4的早期,为了简化地址分配和路由过程,整个IPv4地址空间被分成了几个固定的类别:A、B、C、D和E类。这些网络类别的主要区别在于它们各自的网络和主机地址部分的长度,这决定了每个类别可以容纳的网络和主机的数量。A类网络:地址范围:1.0.0......
  • ECSE 4670 计算机通信网络
    在这个由多部分组成的任务中,我们最终将构建一个简单但可靠的文件传输UDP上的应用程序。然而,为了实现这一目标,我们将首先实施在分配的A部分中,通过UDP“ping”应用程序。此UDPPing器应用程序将帮助您熟悉UDP套接字并开发一个简单的请求￾超时的响应协议。在作业的B部分,我们将使用这......