Java 网络编程

简介: 一:OSI模型 Open System Interconnection 开放系统互联 二:TCP/IP分层模型 TCP代表传输控制协议:Transfer Control Protocol 允许两个程序之前进行可靠的通讯 UDP代表用户报文协议:User Datagram Protocol 允许两个程序之前进行不可靠的通讯 三 客户端 和 服务器 四:套接字 定义:Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据 五:InetAddress类代表IP地址,没有构造器但是有多个方法,查询API文档。

一:OSI模型

Open System Interconnection 开放系统互联

二:TCP/IP分层模型

TCP代表传输控制协议:Transfer Control Protocol 允许两个程序之前进行可靠的通讯

UDP代表用户报文协议:User Datagram Protocol 允许两个程序之前进行不可靠的通讯

三 客户端 和 服务器

四:套接字

定义:Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据

五:InetAddress类代表IP地址,没有构造器但是有多个方法,查询API文档。

六:TCP套接字编程

服务器:

–1.利用ServerSocket建立对服务端某个端口的监听。

  如:ServerSocket  server = new ServerSocket(8000);

–2.利用accept方法创建服务端Socket

  如:Socket socket = server.accept()

–3.利用已建立的socket创建输入输出流

  如:BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream()));    

–4.关闭输入输出流,关闭socket,关闭server

  如:  br.close(); 

  pw.close();

  socket.close();

 1 package inetAddress;
 2 
 3 /**
 4  * 服务器
 5  */
 6 import java.io.BufferedReader;
 7 import java.io.BufferedWriter;
 8 import java.io.InputStreamReader;
 9 import java.io.OutputStreamWriter;
10 import java.net.ServerSocket;
11 import java.net.Socket;
12 
13 public class ServerTest {
14 
15     public static void main(String[] args) throws Exception {
16         // 1创建ServerSocket对象指定端口号
17         ServerSocket server = new ServerSocket(30001);
18         server.setSoTimeout(10000);
19         // 2等待客户连接 accept 返回类型Socket
20         Socket socket = server.accept();
21         // 3从客户端读数据 socket.getInputStream()
22         BufferedReader reader = new BufferedReader(new InputStreamReader(
23                 socket.getInputStream()));
24         char[] ch = new char[100];
25         int len = reader.read(ch);
26         System.out.println("从客户端接收到的消息:");
27         System.out.println(new String(ch, 0, len));
28         // 3向客户端写数据 socket.getOutputStream()
29         BufferedWriter write = new BufferedWriter(new OutputStreamWriter(
30                 socket.getOutputStream()));
31         write.write("我们已经接收到消息了");
32         write.flush();
33         // 4 释放资源
34         reader.close();
35         socket.close();
36         write.close();
37 
38     }
39 
40 }

客户端:

–1.创建客户端Socket向服务器发起连接请求

  如:Socket  socket = new Socket (“127.0.0.1”, 8000);

–2..利用已建立的socket创建输入输出流

  如:BufferedReader br = new BufferedReader( new InputStreamReader( socket.getInputStream()));    

–3.关闭输入输出流,关闭socket,关闭server

  如:  br.close(); 

  pw.close();

  socket.close();

 1 package inetAddress;
 2 
 3 /**
 4  * 客户端
 5  */
 6 import java.io.BufferedReader;
 7 import java.io.BufferedWriter;
 8 import java.io.InputStreamReader;
 9 import java.io.OutputStreamWriter;
10 import java.net.Socket;
11 
12 public class Cliebt {
13 
14     public static void main(String[] args) throws Exception {
15         // 1 创建Socket对象 主机 端口
16         Socket socket = new Socket("127.0.0.1", 30001);
17         // 2向服务器写入数据 .getOutputStream()
18         BufferedWriter write = new BufferedWriter(new OutputStreamWriter(
19                 socket.getOutputStream()));
20         write.write("你好服务器");
21         write.flush();
22         // 2读出数据 .getInputStream()
23         BufferedReader reader = new BufferedReader(new InputStreamReader(
24                 socket.getInputStream()));
25         char[] ch = new char[100];
26         int len = reader.read(ch);
27         System.out.println("数据");
28         System.out.println(new String(ch, 0, len));
29         // 3 释放资源
30         reader.close();
31         write.close();
32         socket.close();
33     }
34 
35 }

七:UDP套接字编程

用户报文协议(UDP)是用于将二进制数据从一台计算机发送到另一台计算的非连接协议。
数据被称为数据报包,它包含了数据将要发送到的目标服务器和端口号。
DatagramSocket类的send()和receive()方法都带有一个DatagramPacket参数。
 
 1 package chap18UDP;
 2 
 3 import java.io.IOException;
 4 import java.net.DatagramPacket;
 5 import java.net.DatagramSocket;
 6 
 7 /**
 8  * 发送
 9  * 
10  * @author acer
11  *
12  */
13 public class Sender {
14 
15     public static void main(String[] args) throws IOException {
16         // * 1创建DatagramSocket对象
17         DatagramSocket scoket = new DatagramSocket(3000);
18         // *2 创建DatagramPacket对象
19         byte[] buffer = "你好".getBytes();
20         int port = 30001;
21         DatagramPacket packet = new DatagramPacket(buffer, buffer.length,
22                 scoket.getInetAddress().getLocalHost(), port);
23         // 3 使用send
24         scoket.send(packet);
25         System.out.println("正在发送消息");
26         // 释放资源
27         scoket.close();
28 
29     }
30 
31 }

 

接收数据报包需要执行如下步骤:
1. 创建一个足够大的字节数组,用于存储要接收的包的数据。
2. 使用该字节数组实例化一个DatagramPacket对象。
3. DatagramSocket被实例化,它被指定该套接字要绑定到的本地主机上的一个端口。
4. 调用DatagramSocket类的receive()方法,将DatagramPacket对象传入该方法。这将导致执行线程阻塞,直到接收到一个数据报包或者发生了超时
 1 package chap18UDP;
 2 
 3 import java.net.DatagramPacket;
 4 import java.net.DatagramSocket;
 5 
 6 /**
 7  * 接收
 8  * 
 9  * @author acer
10  *
11  */
12 public class Reciver {
13 
14     public static void main(String[] args) throws Exception {
15         // 创建字节数组
16         byte[] buffer = new byte[1024];
17         // 2 创建DatagramPacket对象
18         DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
19         // 3 创建DatagramSocket对象
20         DatagramSocket socket = new DatagramSocket(30001);
21         // 4 使用receive方法
22         socket.receive(packet);
23         System.out.println("正在接收从" + packet.getSocketAddress() + "的信息");
24         System.out.println(new String(packet.getData()));
25         // 释放资源
26         socket.close();
27 
28     }
29 
30 }
p发送数据报包需要执行如下步骤:
•1. 创建一个足够大的字节数组,用于存储要发送的包数据,用该数据填充数组。
•2. 创建一个新的DatagramPacket 对象,用于存储上面的字节数组,以及服务器名和接收者的端口号。
•3. DatagramSocket被实例化,它被指定套接字要绑定到本地主机的哪个端口。
•4. DatagramSocket类的send()方法被调用,传入DatagramPacket对象。
 
 
 
 
相关文章
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
397 11
|
6月前
|
JSON 移动开发 网络协议
Java网络编程:Socket通信与HTTP客户端
本文全面讲解Java网络编程,涵盖TCP与UDP协议区别、Socket编程、HTTP客户端开发及实战案例,助你掌握实时通信、文件传输、聊天应用等场景,附性能优化与面试高频问题解析。
|
4月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
260 1
|
4月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
269 1
|
4月前
|
机器学习/深度学习 分布式计算 Java
Java与图神经网络:构建企业级知识图谱与智能推理系统
图神经网络(GNN)作为处理非欧几里得数据的前沿技术,正成为企业知识管理和智能推理的核心引擎。本文深入探讨如何在Java生态中构建基于GNN的知识图谱系统,涵盖从图数据建模、GNN模型集成、分布式图计算到实时推理的全流程。通过具体的代码实现和架构设计,展示如何将先进的图神经网络技术融入传统Java企业应用,为构建下一代智能决策系统提供完整解决方案。
489 0
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
287 9
|
11月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
509 23
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
|
12月前
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
419 0
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
215 13