返回顶部
首页 > 资讯 > 后端开发 > Python >Java 全面掌握网络编程篇
  • 448
分享到

Java 全面掌握网络编程篇

2024-04-02 19:04:59 448人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录计算机网络网络模型客户机服务器模式(Client/Server)tcp/IP的概念和实现TCP三次握手(Three-way handshake)TCP编程UDP的概念和实现UDP

计算机网络

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

网络模型

网络模型一般是指
○ OSI(Open System Interconnection开放系统互连)参考模型
○ TCP/IP参考模型
网络编程 就是用来实现网络互联的不同计算机上运行的程序间可以进行数据交换。
计算机网络之间以何种规则进行通信,就是网络模型研究问题

在这里插入图片描述

客户机服务器模式(Client/Server)

●为了实现两台计算机的通信,必须要用一个网络线路连接两台计算机。
● 服务器(Server)是指提供信息的计算机或程序
●客户机(Client)是指请求信息的计算机或程序
●网络用于连接服务器与客户机,实现两者相互通信。

在这里插入图片描述

TCP/IP的概念和实现

TCP/IP:Transmission Control Protocol/Internet Protocol的简写。TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。

TCP三次握手(Three-way handshake)

所谓的“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立连接。
❤ 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)。
❤ 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
❤ 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ETABLISHED(TCP连接成功)状态,完成三次握手。
❤ 完成三次握手,客户端与服务器开始传送数据

在这里插入图片描述

TCP编程

套接字(Socket)是使用TCP提供了两台计算机之间的通信机制。
客户端程序创建一个套接字,并尝试连接服务器的套接字。
当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对
Socket 对象的写入和读取来进行通信。
► 服务端:
创建服务端对象,监听一个端口


ServerSocket ss = new ServerSocket(100);

获取客户端对象


Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();

► 客户端:
创建客户端socket服务,把ip和端口作为地址传进构造函数


Socket s = new Socket("localhost",100);

UDP的概念和实现

UDP(User Datagram Protocol):UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。
用户数据包协议(UDP)是网络信息传输的另一种形式,基于UDP的通信与基于TCP的通信不同,UDP的信息传递更快,但不提供可靠的保证。

UDP编程

发送端:
建立udp服务,发送端没有指定端口,会自动分配一个端口
DatagramSocket ds = new DatagramSocket();
定义数据内容,并将数据封装成包
byte[] bt = “hello,udp,我来了”.getBytes();
把要发送的数据和ip、port封装到数据包里
DatagramPacket db = new
DatagramPacket(bt,bt.length,InetAddress.getByName(“192.168.1.105”),10000);
通过udp的socket服务中的功能完成数据包的发送 ds.send(db);
接收端:定义socket服务,监听端口
DatagramSocket ds = new DatagramSocket(10000);
预先定义好一个数据包,用于存储接收到的数据
byte[] bt = new byte[1024];
创建数据包对象,用于接收数据
DatagramPacket dp = new
DatagramPacket(bt,bt.length);
使用socket服务的receive方法将接受到的数据存储到数据包中
ds.receive(dp);
通过数据包对象,获取数据包内容
byte[] data = dp.getData();
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();

TCP和UDP的区别

TCP:
1,面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接时间。
2,TCP传输数据无大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的数据。
3,TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。
UDP:
1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。
2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。
3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方

TCP和UDP最大的区别在于是否需要客户端与服务端建立连接后才能进行数据传输。

聊天室

服务器处理线程


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.Socket;
import java.net.SocketException;
import java.util.Scanner;

public class ServerTask  implements Runnable{
	
	
	private Socket socket;

	
	public ServerTask(Socket socket) {
		// TODO 自动生成的构造函数存根
		this.socket = socket;
	
	}
	
	@Override
	public void run() {
		// TODO 自动生成的方法存根
		
		//建立通信后所执行的内容
		
		System.out.println("欢迎【"+socket.getRemoteSocketAddress().toString()+"】进入聊天室");
		
		//构建读取缓冲
		BufferedReader br =null;
		//Http响应写入
		PrintWriter pw = null;
		
		try {
			
			//获取客户端输入的信息 字节流缓冲成字符流
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String msg;
			
			while((msg=br.readLine()) != null) {
				msg = "【"+socket.getRemoteSocketAddress().toString()+"】说"+msg;
				
				//输出客户端信息
				System.out.println(msg);
				
				//服务器接收到客户端的消息发送消息给客户端
				Scanner scanner = new Scanner(System.in);
				System.out.println("请输入要发送的信息!");
				
				
				pw = new PrintWriter(socket.getOutputStream(),true);
				pw.println("服务器说:"+scanner.nextLine());
				pw.flush();				
			}	
		}catch (SocketException e) {
			// TODO: handle exception
			System.out.println(socket.getRemoteSocketAddress().toString()+"退出聊天室!");
		}	
		catch (Exception e) {
			// TODO: handle exception
		}
		
	}

}

客户端处理线程


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.util.Scanner;


public class ClientTask  implements Runnable{

	private Socket socket;
	
	
	
	public ClientTask(Socket socket) {
		// TODO 自动生成的构造函数存根
		this.socket = socket;
	}
	
	
	@Override
	public void run() {
		// TODO 自动生成的方法存根
		
		try {
				while(true) {
					Scanner scanner = new Scanner(System.in);
					System.out.println("请输入要发送的信息");
					//消息发送到服务器
					
					PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
					
					//br.readLine()读取的消息发送到服务器
					pw.println(scanner.nextLine());

					
					//读取服务器发送的消息
					BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					System.out.println(br.readLine());

				}		
		}
		catch (Exception e) {
			// TODO: handle exception
		}
		
		
		
	}

	
}

服务器


import java.net.ServerSocket;
import java.net.Socket;

import com.qingsu.chat.Task.ServerTask;

public class ChatServer {

	
	public static void main(String[] args) {
		try {
			
			//创建服务端对象 监听一个窗口
			ServerSocket serverSocket = new ServerSocket(10622);
			System.out.println("服务器创建成功!端口号"+10622);
			
			//阻塞 直到有链接返回
			while(true) {
				Socket socket = serverSocket.accept();//获取客户端对象
				
				//启动一个线程处理该链接
				
				Thread thread = new Thread(new ServerTask(socket));
				thread.start();
				
			}		
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

客户端


import java.net.Socket;

import com.qingsu.chat.Task.ClientTask;

public class ChatClient {
	
	
	public static void main(String[] args) {
		try {
			
			//创建客户端socket服务,把ip和端口作为地址传进构造函数
			Socket socket = new Socket("127.0.0.1",10622);
			
			//启动客户机线程处理
			Thread thread = new Thread(new ClientTask(socket));		
			thread.start();
		
			
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

}

效果

在这里插入图片描述

到此这篇关于Java 全面掌握网络编程篇的文章就介绍到这了,更多相关Java 网络编程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java 全面掌握网络编程篇

本文链接: https://lsjlt.com/news/154367.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java 全面掌握网络编程篇
    目录计算机网络网络模型客户机服务器模式(Client/Server)TCP/IP的概念和实现TCP三次握手(Three-way handshake)TCP编程UDP的概念和实现UDP...
    99+
    2024-04-02
  • Java网络编程之入门篇
    目录一、网络基础二、网络协议URL类一、网络基础   二、网络协议 实现TCP的网络编程 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上 p...
    99+
    2024-04-02
  • PyTorch一小时掌握之神经网络分类篇
    目录概述导包设置超参数读取数据可视化展示建立模型训练模型完整代码概述 对于 MNIST 手写数据集的具体介绍, 我们在 TensorFlow 中已经详细描述过, 在这里就不多赘述. ...
    99+
    2024-04-02
  • 网络编程(全)
    【网络编程】 今日内容 软件架构CS/BS网络通信三要素TCP通信Socket套接字ServerSocket文件上传自定义服务器 第一章 网络编程入门 1.1软件结构 C/S结构 :全称为Client...
    99+
    2023-09-06
    网络 tcp/ip 服务器
  • 掌握 ASP URLScan,成为网络安全大师
    ASP URLScan 是一种功能强大的应用程序,旨在保护 ASP Web 应用程序免受恶意攻击。它作为一个 Web 服务器的扩展,在请求到达应用程序之前对其进行检查和过滤,防止潜在有害内容进入系统。 安装和配置 要安装 ASP URL...
    99+
    2024-03-07
    ASP URLScan、网络安全、恶意软件防御、威胁检测
  • 掌控Java网络编程:叩响网络世界的大门
    Java网络编程是通往网络世界的门户,它赋予开发者将应用程序连接到互联网并与其交互的能力。掌握Java网络编程是扩展软件功能、促进数据交换和提供无缝用户体验的关键。 客户端-服务器架构 Java网络编程的核心在于客户端-服务器架构。客户端...
    99+
    2024-03-15
    网络编程
  • 揭秘 Java 内存模型:全面掌握多线程编程背后的秘密
    Java 内存模型 (JMM) 是 JVM 对内存访问和操作的规范,它定义了多线程编程中变量的访问规则和数据一致性问题。JMM 是一套抽象的规范,JVM 的具体实现可以根据不同的硬件平台和操作系统而有所不同,但它们都必须遵守 JMM 的...
    99+
    2024-02-04
    Java 内存模型 多线程 并发编程 可见性 原子性 有序性
  • 高效掌握Go语言网络编程的实践指南
    快速入门Go语言网络编程的实用指南 引言:随着互联网的不断发展和普及,网络编程已成为越来越重要的一项技能。Go语言作为一种现代化的编程语言,具有高效、简洁、易学的特点,自然也就成为了很多开发者进行网络编程的首...
    99+
    2024-01-30
    Go语言 网络编程 实用指南 标准库
  • 一篇文章带你入门java网络编程
    目录基于TCP/IP协议的通信基于UDP协议的通信InetAddress案例演示 (简易聊天室)UDP 演示总结基于TCP/IP协议的通信 TCP/IP协议 ...
    99+
    2024-04-02
  • 掌握 ASP URLScan:网络安全的秘密武器
    ASP URLScan 是一款功能强大的 Web 应用程序保护工具,可保护您的 ASP 网站免受恶意攻击和安全漏洞的影响。通过对传入请求进行实时扫描,URLScan 可以检测和阻止恶意活动,从而保障您的网站和数据的安全。 URLScan ...
    99+
    2024-03-07
    ASP URLScan、网络安全、Web应用程序保护、Web服务器、安全漏洞
  • PyTorch一小时掌握之神经网络气温预测篇
    目录概述导包数据读取数据预处理构建网络模型数据可视化完整代码概述 具体的案例描述在此就不多赘述. 同一数据集我们在机器学习里的随机森林模型中已经讨论过. 导包 import nu...
    99+
    2024-04-02
  • Java 网络编程
    Java 网络编程   目录 Java 网络编程   Socket 编程 ServerSocket 类的方法 Socket 类的方法   InetAddress 类的方法 Socket 客户端实例 Socket 服务端实例     网络编...
    99+
    2023-10-09
    java
  • 解开 Java 控制流的面纱:掌握编程之钥
    条件语句 条件语句允许程序根据一个或多个条件执行不同的动作。主要类型是: if 语句:执行 if 条件为 true 的代码块,否则执行 else 块(可选)。 switch 语句:根据表达式的值执行不同的代码块,类似于一系列 if 语句...
    99+
    2024-04-02
  • Java网络编程 - 网络编程介绍 - 网络通信三要素
    文章目录 网络编程网络编程介绍网络通信三要素要素一: IP地址IP地址基本介绍IP地址的操作类 要素二: 端口号要素三: 协议TCP协议UDP协议 网络编程 网络...
    99+
    2023-09-07
    网络 java 网络协议
  • Java经典面试题汇总:网络编程
    目录1. HTTP 响应码 301 和 302 代表的是什么?有什么区别?2. 简单说一下http协议?3. HTTP与HTTPS的区别?4. HTTP协议下客户端请求报文是什么?5...
    99+
    2024-04-02
  • 【史上最全面esp32教程】网络篇和tcp/ip的使用
    文章目录 前言esp32网络学习路线ESP32连接网络ESP32 TCP/IP通信示例程序 前言 ESP32是一款集成Wi-Fi和蓝牙的开发板,它可以轻松地和其他设备进行网络和TCP/I...
    99+
    2023-09-13
    网络 tcp/ip 服务器 单片机 c++
  • Java并发和线程安全怎么掌握
    本文小编为大家详细介绍“Java并发和线程安全怎么掌握”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java并发和线程安全怎么掌握”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。为什么有多线程谈到多线程,我们很容...
    99+
    2023-06-02
  • 详解Java网络编程
    目录一、网络编程1.1、概述1.2、计算机网络基础1.3、网络通信要素概述1.4、IP地址和端口号(组合就是网络套接字)1.5、网络协议1.6、三次握手与四次挥手二、TCP网络编程2...
    99+
    2024-04-02
  • Java 网络编程总结
    目录1、IP地址2、端口3、通信协议3.1 TCP/IP协议簇:实际上是一组协议3.2 TCP UDP对比3.3 TCP实现聊天3.4 TCP文件上传3.5 UDP消息发送3.6 U...
    99+
    2024-04-02
  • Java 网络编程基础
    文章目录 前言什么是网络编程网络编程基础知识网络通讯流程长连接和短连接Socket Java 网络编程总结 前言 一个网络请求、服务之间的调用都需要进行网络通讯,在日常开发时我们可能并不会关心我们的服务端是怎么接收到请求的、...
    99+
    2023-08-16
    java 网络 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作