当前位置: 首页 > news >正文

Java基础(网络编程)

一、概述

目的:网络通信:

1、设备和设备

2、进程和进程

  1)不同设备之间

  2)本地设备之间

需要解决的问题:

如何准确地发送到对方的主机 - IP地址 - 唯一的定位网络中的一台主机

如何准确的发送到对方主机的进程 - 端口

找到主机后如何可靠高效地进行数据传输,要能看懂 - 协议 - 规定/标准

二、网络通信要素

如何实现网络中的主机互相通信?

~一定的规则(即:网络通信协议。有两套参考模型)

  OSI参考模型

 TCP/IP参考模型(或TCP/IP协议)

~通信双方地址

IP地址

端口号

2.1、网络协议:

一种规则,人与人交流有语言的规则,计算机之间通过网络交流也要有网络的规则。

2.1.1、OSI参考模型

模型过于理想化,未能在因特网上进行广泛推广 

2.1.2、TCP\IP协议

 出现较早,事实上的标准。

两种协议之间存在对应关系:

传输控制协议(TCP)和网络互联协议(IP),一组协议,不同功能互相关联

2.1.3、TCP和UDP

TCP协议:

使用TCP协议前,须先建立TCP连接,形成传输数据通道;

传输前,采用三次握手方式,是可靠的;

TCP协议进行通信的两个应用进程:客户端、服务端;

在连接中可进行大数据量的传输;

传输完毕,使用四次挥手方式,释放连接,结束传输,效率低。

UDP协议:

将数据、源、目的封装成数据包,不需要建立连接;

每个数据报的大小限制在64KB内;

因无需连接,故是不可靠的;

发送数据结束时无需释放资源,速度快。

三次握手过程:

四次挥手过程

 2.2、IP地址和端口号

2.2.1、IP地址

唯一的标识Internet上的计算机(通信实体)

分类:

IPV4:4个字节组成,4个0~255,如192.168.0.1

IPV6:128位(16个字节),写成8个无符号整数,每个整数用四个十六进制表示

如:3ffe:3201:1401:1280:c8ff:fe4d:db39:198

2.2.2、端口号省略。。。

三、TCP编程_服务器和客户端

目标:

1、客户端能够连接服务器

2、客户端能够给服务器发送字符串并在服务器的控制台打印,直到发送exit表示发送结束

这里见源码及其注释:

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/*
* 服务器
* */
public class Server {public static void main(String[] args) throws IOException {//创建监听套接字 最大端口65535ServerSocket serverSocket = new ServerSocket(60000);while (true) {//创建已连接套接字 - 返回表示有客户端连接Socket socket = serverSocket.accept();//获取客户端的IP和端口System.out.println(socket.getInetAddress().getHostAddress() + ":" + socket.getPort() + "已连接");int len = 0;byte[] arr = new byte[1024];//IO操作InputStream in = socket.getInputStream();while(true) {len = in.read(arr, 0, arr.length);if(len == -1) {break;}//byte[] --> StringString s = new String(arr, 0, len);System.out.println(s);}//关闭socket.close();}}
}
package day31;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);//创建套接字 -- 如果成功表示和服务器连接成功Socket socket = new Socket("127.0.0.1", 60000);//IO操作OutputStream out = socket.getOutputStream();while(true) {//获取用户输入String s = sc.next();if(s.equals("exit")) {break;}//将输入的数据发送给服务器out.write(s.getBytes());}//关闭socket.close();}
}

http://www.dtcms.com/a/192646.html

相关文章:

  • 今日行情明日机会——20250515
  • ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal 详解与使用场景
  • 初始化一个Springboot项目
  • linux libdbus使用案例
  • 双目立体视觉
  • 紫外相机工作原理及可应用范围
  • 介绍一下什么是 AI、 AGI、 ASI
  • 量子隧穿:PROFINET到Ethernet ip的无损耗协议转换方案转
  • keil uniFlash烧录出现八字节对齐错误
  • 新能源汽车制动系统建模全解析——从理论到工程应用
  • 220V转24V非隔离恒压芯片WT5105
  • linux备份与同步工具rsync
  • linux dbus
  • 【用户与进程】
  • 2.安卓逆向2-adb指令
  • mvc-service引入
  • DG-3F三指机械灵巧手,3手指和12关节,单爪即可实现最高效率
  • 九、HQL DQL七大查询子句
  • 机器人弧焊二八混合气体节约
  • 《Java 大视界——Java 大数据在智能电网分布式能源协同调度中的应用与挑战》
  • centos7 基于yolov10的推理程序环境搭建
  • java17
  • 每日一道leetcode(新学数据结构版)
  • 高防服务器流量“清洗”什么意思
  • msf安卓远控木马手动捆绑正常apk
  • 分类预测 | Matlab实现ABC-Transformer人工蜂群算法优化编码器多特征分类预测/故障诊断Matlab实现
  • 【FileZilla】 从事件类型到消息类型的函数形参类型转化
  • 使用Beyond Compare显示有差异点进去又没差异 问题解决
  • 提高成功率!课题中的立项依据深度写作
  • 计算机视觉----基于锚点的车道线检测、从Line-CNN到CLRNet到CLRKDNet 本文所提算法Line-CNN 后续会更新以下全部算法