java 网络编程(BI0)

Java 网络编程(超级详细) 1. 网络编程 1.1 网络编程概述 计算机网络 是指将地理位置相同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 1.2 网络编程三要素 1、IP地址 要想让网络中的计算机能够互相通信,必须为计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识。 2、端口 网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程 阅读详情

1.协议TCP/UDP

Java网络程序有两种协议,tcp协议和udp协议。Tcp协议面向连接(三次握手)可靠的协议(基于字节流的传输层协议),但是传输速度慢。Udp提供简单不可靠的行西传输服务,不属于连接型服务,传输速度快,容易出现丢包现象。


2.SMTP简单邮件传输协议

3. ip:网络地址(确定网络)和主机地址(网络中的主机)组成

  Window下在命令行中输入ipconfig查看本机ip地址,输入ping+ 目标ip地址查看网络是否通畅。

4.url:统一资源定位符格式:[scheme:]scheme-specific-part[#fragment]

Scheme:协议http\https\ftp\file等 scheme-specific-part表示其他部分

5.Socket:(通信链路的端口,也被称为套接字)

1.基于tcp协议的socket通信

       •基于TCP协议的socket通信,用于实现双向安全的网络同行,进行通信时socket需要借助数据流来完成数据的传递工作。


       •基于TCP协议网络编程步骤:1.建立连接->打开使用socket关联的输入输出流->数据流中读写信息->关闭所有的数据流和socket (客户端和服务器之间信息传递)

•实现多个客户端和服务器的信息传递(创建服务器端线程类或者一个操作类,实现对一个请求的响应处理->循环监听请求)

客户端代码:

package lesson13;
import
java.io.*;
import
java.net.Socket;
public class
s3 {
   
public static void main(String[]args) throws IOException{
       
//创建客户端Socket,指定服务器和端口
        Socket sc=new Socket("localhost",10086);
       
//获取输出流向服务端发送信息
       
OutputStream os=sc.getOutputStream();//字节输出流
       
PrintWriter pw=new PrintWriter(os);//将输出流包装成打印流
       
pw.write("用户名:name;密码:789");
       
pw.flush();
       
sc.shutdownOutput();//关闭输出流

        //
获取输入流,并读取服务端的响应信息
        InputStream is=sc.getInputStream();
       
BufferedReader br=new BufferedReader(new InputStreamReader(is));
       
String info=null;
        while
((info=br.readLine())!=null){
            System.
out.println("我是客户端,服务器说:"+info);
       
}
       
//关闭资源
       
br.close();
       
is.close();
       
pw.close();
       
os.close();
       
sc.close();
   
}
}

服务器端代码;

package lesson13;

/*
服务器端:
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过输入流读取客户端发送的请求信息
④ 通过输出流向客户端发送乡音信息
⑤ 关闭相关资源
 */

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Sket {
    public static void main(String[] args) throws IOException{
        //创建一个服务器socket,即ServerSocket,指定绑定端口,并监听此窗口
        ServerSocket ss = new ServerSocket(10086);
        //调用accept()方法开始监听,等待客户端连接
        Socket sc=ss.accept();
        //获取输入流,读取客户端信息
        InputStream is=sc.getInputStream();
        InputStreamReader isr=new InputStreamReader(is);
        BufferedReader br=new BufferedReader(isr);
        String info=null;
        while((info=br.readLine())!=null){
            System.out.println("我是服务器,客户端说:"+info);
        }
        sc.shutdownInput();//关闭输入流

        //获取输入流,获取客户端的请求
        OutputStream os=sc.getOutputStream();
        PrintWriter pw=new PrintWriter(os);
        pw.write("欢迎您!");
        pw.flush();

        //关闭资源
        pw.close();
        os.close();
        br.close();
        isr.close();
        is.close();
        sc.close();
        ss.close();
    }
}

接收多个服务器的客户端代码:

package lesson13;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created by jone on 2018/1/19.
 */

public class mutilsket2 {
    public static void main(String[] args) throws IOException{
        //创建一个ServerSocket,绑定端口
        ServerSocket ss=new ServerSocket(10086);
        //调用accept方法开始监听客户端连接,accept返回的是一个新的套接字
        Socket sc=null;
        int count=0;
        while(true){
            sc=ss.accept();//监听客户端连接
            operate(sc);
            count++;
            System.out.println("客户端访问数量:"+count);
        }
    }

    //处理一个请求
    public static void operate(Socket sc)throws IOException{
        //接受客户端的信息
        //获取输入输出流 getInputStream
        InputStream in=sc.getInputStream();
        //创建reader对象
        InputStreamReader isr=new InputStreamReader(in);
        //创建bufferedReader对象
        BufferedReader br=new BufferedReader(isr);
        //创建空字符串
        String info=null;
        while ((info=br.readLine())!=null){
            System.out.println("客户端数据为:"+info);
        }

        //给客户端发送信息
        //创建服务器端的输出流 getOutputStream
        OutputStream os=sc.getOutputStream();
        PrintWriter pw=new PrintWriter(os);
        pw.write("欢迎你!");
        pw.flush();
        //关闭资源
        br.close();
        isr.close();
        in.close();
        pw.close();
        os.close();
    }
}

2.基于udp协议的socket通信

•基于udp协议socket通信步骤:利用DatagramPacket对象封装数据包->利用DatagramSocket发数据包->利用DatagramSocket收数据包->利用DatagramPacket处理数据包。

客户端代码:

package lesson13;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 2、客户端实现步骤
 ① 定义发送信息
 ② 创建DatagramPacket,包含将要发送的信息
 ③ 创建DatagramSocket
 ④ 发送数据
 */
public class Udp_kh {
    public static void main(String[] args) throws Exception{
        //定义服务器的地址、端口号、数据
        InetAddress address=InetAddress.getByName("localhost");
        int port=10010;
        byte[] data="用户名:admin;密码:123".getBytes();
        //创建数据报
        DatagramPacket pc=new DatagramPacket(data,data.length,address,port);
        DatagramSocket sc=new DatagramSocket();
        //向服务器发送报表
        sc.send(pc);

        //===================================================
        //创建数据报,用于接受服务器响应数据
        byte[] data2=new byte[1024];
        DatagramPacket pc2=new DatagramPacket(data2,data2.length);
        //接受服务器响应数据
        sc.receive(pc2);
        String reply=new String(data2,0,pc2.getLength());
        System.out.println("我是客户端,服务器说:"+reply);

        //关闭资源
        sc.close();

    }
}
服务器代码:

package lesson13;

/*
UDP协议(用户数据报协议)是无连接的、不可靠的、无序的,速度快
进行数据传输时,首先将要传输的数据定义成数据报(Datagram),大小限制在64k,在数据报中指明数据索要达到的Socket(主机地址和端口号),然后再将数据报发送出去
DatagramPacket类:表示数据报包
DatagramSocket类:进行端到端通信的类
1、服务器端实现步骤
① 创建DatagramSocket,指定端口号
② 创建DatagramPacket
③ 接受客户端发送的数据信息
④ 读取数据
 */

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Udp {
    public static void main(String[] args) throws IOException{
        //创建服务器端DatagramSocket,指定端口
        DatagramSocket sc=new DatagramSocket(10010);
        //创建数据报,用于接受客户端发送的数据
        byte[] data=new byte[1024];
        DatagramPacket pc=new DatagramPacket(data,data.length);
        //接受客户端发送的数据
        sc.receive(pc);//此方法在接受数据报表时会阻塞
        //读取数据
        String info = new String(data,0,data.length);
        System.out.printf("我是服务器,客户端告诉我:"+ info);

        //=======================================
        //向客户端响应数据
        //定义客户端地址,端口号,数据
        InetAddress address=pc.getAddress();
        int port=pc.getPort();
        byte[] data2="欢迎您".getBytes();
        //创建数据报,包含响应的数据信息
        DatagramPacket pc2=new DatagramPacket(data2,data2.length,address,port);
        //响应客户端
        sc.send(pc2);
        //关闭资源
        sc.close();
    }
}

[java][基础]网络编程入门 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程在网络通信协议下,不同计算机上运行的程序,可以进行数据传输。 阅读详情

相关推荐

JAVA 网络编程

文章目录1. 网络编程2.计算机网络基础知识2.1 计算机网络:2.2 网络通讯的要素2.3 IP地址2.3.1 IP地址的分配2.3.2 IP地址的分类3. 端 口4. 常用默认端口5.网络通信协议/接口6. OSI的七层模型7. TCP协议8. IP协议(Internet Protocol/因特网互联协议)是网络上的计算机进行连接的基础9. TCP/IP协议9.1 InetAddressSoc...

wzq18845280610的博客 1083

图解java的BI0,NIO,最简单直白的理解同步和异步IO模型

最古老的javaIO通信模式BIO,即阻塞IO,同步调用,性能低: 在服务器端:有专门的客户连接 接收器Acceptor,当有新的客户端连接到达后,Acceptor负责第一步连接,然后给每一个客户端连接创建一个新的线程来处理对应的业务;处理完成后,通过输出流返回给客户端,并将线程销毁,这也是最典型的一对一服务模型。 对应模型图如下: 从图中可以明显看出对应Web Browser1,2

Seeker-Wu的专栏 5438

网络编程(Java版)

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

m0_74055560的博客 1455

Html书写规范,基本标签使用

一、html简介 1、html是什么 Html是用来描述网页的一种语言。 (1)HTML 指的是超文本标记语言 (Hyper Text Markup Language) (2)HTML 不是一种编程语言,而是一种标记语言(markup language,标记语言是一套标记标签(markup tag)); (3)HTML 使用标记标签来描述网页 超文本 标记 语言 语言: 人与计

林锐波 9246

网络编程——Java

天天开心

2401_84927284的博客 793

有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(中)

有限时间滑模控制(FTSMC)和固定时间滑模控制(FixTSMC)是两种重要的控制策略,旨在实现系统状态的快速收敛。FTSMC通过设计滑模面和控制律,确保系统状态在有限时间内收敛到原点,但其收敛时间与初始状态相关。FixTSMC则进一步优化,使收敛时间与初始状态无关,适用于高动态环境,具有更强的鲁棒性和更平滑的控制信号。两种方法均通过李雅普诺夫函数证明其稳定性,并通过仿真验证其有效性。FixTSMC在工程应用中更为可靠,尤其适合安全关键系统。

Lyajpunov的博客 3224

腾讯2019暑期实习笔试编程题

1.拆分数字 #include<iostream>//腾讯第一题 #include<algorithm> using namespace std; int splitnum(int n,int k) { if(n==1) return 1; if(n==2) return 2; int count=0; while(k--) { count+=1;...

qq_33508523的博客 432

SpringCloud2025+SpringBoot3.5.0动态路由503问题排查与负载均衡依赖解析

本文详细排查了SpringCloud 2025与SpringBoot 3.5.0环境下,Spring Cloud Gateway动态路由返回503错误的根本原因。核心问题在于新版网关未默认集成负载均衡器,导致无法解析lb://服务名。通过对比静态路由与动态路由,定位到需显式引入spring-cloud-starter-loadbalancer依赖,并提供了完整的解决方案与最佳实践配置。

s3t4u的博客 503

闲来无事——java ME 手机应用开发浅识

学习java已经有一段时间了,进步不快,长进一般,想起了学习java之初,也在J2SE,J2EE和J2ME之间犹豫徘徊了很久,在现在的架构渐渐从C/S转向B/S的趋势中J2SE的前景是否会受到一点影响是我不能预测的,从学习C#.NET的经历来看.net已经提供了一套完备而成熟的桌面开发的环境,我不知道C#和java二者的可比性在哪里,如此粗浅的理解也顿显了自己的无知,在此无可深入的话题,只能说还要

代码创造世界,产品改变世界 1228

STM32 LwIP协议栈优化:从TCP延迟10ms降至1ms的内存配置手册

摘要: 本文针对STM32嵌入式开发中LwIP TCP通信的高延迟问题(默认配置下延迟达10~20ms),提出纯软件优化方案,通过调整内存配置与TCP参数将延迟降至1ms。核心问题包括内存池不足、pbuf分配低效及Nagle算法拖累,优化步骤包括: 内存池扩容:增大MEMP_NUM_TCP_PCB至10、PBUF_POOL_SIZE至32,避免资源竞争; pbuf静态池分配:采用2048字节大块缓冲区匹配DMA传输,减少分块与拷贝; 关闭Nagle算法:设置TCP_NODELAY=1,禁用延迟确认以加速小包

weixin_42212753的博客 1707

【漏洞复现】爱数云盘 Usrm_GetAllUsers 未授权访问漏洞

爱数 AnyShare存在未授权漏洞,未授权的攻击者可以通过该漏洞获取用户名信息。

qq_67810151的博客 3121

再读《Java编程思想 》

前段时间在豆瓣上无意间看到一个帖子“我为什么把thinking in java 读了10遍”,是11年的帖子,下面评论至今,各种声音都有,不过大多数还是佩服和支持的。我个人来讲也是非常支持的,而且也打算再读《Thinking in Java》,上学那会老师再三强调:“读书百遍,其义自见!”,但是对于程序猿,不光要读,而且要实践。一、为什么要再读    上一篇,我曾经说过,如何在Java界立足,凭借

honghailiang的专栏 1万+

AUTOSAR 导入DBC ISOLAR工程配置

ISOLAR工程配置-dbc导入

汽车电子电气 2406

Java网络编程

Java网络编程

游手好闲 1075

YOLOv11 损失函数进阶:Varifocal Loss 让正负样本精度双升

创建self.alpha = alpha # 正样本权重系数self.gamma = gamma # 聚焦系数self.lambda_reg = lambda_reg # 回归损失权重# 分类损失:Varifocal Classification Loss# 正样本权重:基于预测置信度# 计算 BCE 损失并加权cls_loss = cls_loss.sum() / (cls_true.sum() + 1e-6) # 按正样本数归一化。

m0_71589036的博客 440

Codex入门01-环境安装(小白入门:手把手教你安装配置,国内网络也能搞定)

本文手把手教你从零搭建 Codex CLI 开发环境。内容涵盖 Node.js 安装(macOS/Windows/Linux)、Codex CLI 全局安装、ChatGPT 账号登录认证,以及国内网络代理配置。还包括常见问题排查和一键启动脚本编写。跟着截图一步步操作,10分钟搞定全部环境,开始用AI写代码!

yueyeguzhuo的专栏 344

十二、Java网络编程

文章目录十二、Java网络编程1.网络编程入门1.1 网络编程概述【理解】1.2 网络编程三要素【理解】1.3 IP地址【理解】1.4InetAddress【应用】1.5端口和协议【理解】2.UDP通信程序2.1 UDP发送数据【应用】2.2UDP接收数据【应用】2.3UDP通信程序练习【应用】3.TCP通信程序3.1TCP发送数据【应用】3.2TCP接收数据【应用】3.3TCP通信程序练习【应用】3.4TCP通信程序练习【应用】3.5TCP通信程序练习【应用】3.6TCP通信程序练习【应用】3.7TCP通

汪随安的博客 2917

【深度学习新浪潮】Score Matching(分数匹配):原理、推导与PyTorch实战

在概率模型训练中,配分函数(归一化常数)是绕不开的难题——尤其是能量模型(EBM)、扩散模型等未归一化模型,直接计算配分函数几乎不可能。Score Matching(分数匹配)作为一种无归一化的参数估计方法,通过拟合概率密度的对数梯度(分数函数),彻底避开了配分函数的计算,成为生成建模、密度估计的核心技术之一。本文将从基础概念出发,逐步推导Score Matching的核心公式,并结合PyTorch实现一个可直接运行的实战案例,帮你彻底理解这一关键技术。Score Matching的核心是。

专注:太空算力、AI infra、异构调度、大模型成本工程 250

Java学习笔记——网络编程

将不同区域的电脑连接到一起,组成局域网、城域网或广域网。把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。

m0_73856804的博客 1046

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JavaWeb笔记(一)Java网络编程

Java网络编程 在JavaSE阶段,我们学习了I/O流,既然I/O流如此强大,那么能否跨越不同的主机进行I/O操作呢?这就要提到Java的网络编程了。 **注意:**本章会涉及到计算机网络相关内容(只会讲解大致内容,不会完整的讲解计算机网络知识) 计算机网络基础 利用通信线路和通信设备,将地理位置不同的、功能独立的多台计算机互连起来,以功能完善的网络软件来实现资源共享和信息传递,就构成了计算机网络系统。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ykjZ8oQY-163

qq_25928447的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java 网络编程

Java 网络编程 一、网络编程入门 1.1 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网阔通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程 在网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换 1.2 网络编程的三要素 IP地址 想要让网络中的计算机能够相互通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就

hua226的博客 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java-网络编程基础

在网络通信协议下,不同计算机上运行的程序,可以进行数据传输。

qq_33627452的博客 950

Java 网络编程

1106

java网络编程

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

是程序喵呀 1119
上一篇: win 10 下java 安装
下一篇: django 学习笔记
learnpy3
博客等级 码龄9年 8粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值