网络编程基础

Marmara ·
更新时间:2024-09-20
· 810 次阅读

网络编程基础 文章目录网络编程基础认识IP地址认识MAC地址认识端口号socket编程接口在Udp协议中常用的方法认识UDP协议UDP通信原理UDP发送数据UDP接收数据ServerSocket中的常用方法Socket在Tcp协议中的常用方法TCP协议TCP通信原理TCP发送数据TCP接收数据 认识IP地址

IP协议有两个版本, IPv4和IPv6. 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4 IP地址是在IP协议中, 用来标识网络中不同主机的地址; 对于IPv4来说, IP地址是一个4字节, 32位的整数; 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字 节, 范围是 0 - 255;

在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址。

认识MAC地址

MAC地址用来识别数据链路层中相连的节点; 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示,在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能 会冲突; 也有些网卡支持用户配置mac地址).

认识端口号

端口号(port)是传输层协议的内容.
端口号是一个32位的整数;
端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;
一个端口号只能被一个进程占用。

传输层协议(TCP和UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号.

socket编程接口在Udp协议中常用的方法

常用的Socket类中的方法:
在这里插入图片描述

认识UDP协议

用户数据报协议(User Datagram Protocol)
UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当-台计算机向另外-台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输
例如视频会议通常采用UDP协议,因为这种情况即使偶尔丢失- -两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议

UDP通信原理

UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象, 但是这两个Socket只是发送, 接收数据的对象因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念Java提供了DatagramSocket类作为基于UDP协议的Socket

UDP发送数据

发送数据的步骤
①创建发送端的Socket对象(DatagramSocket)
②创建数据, 并把数据打包
③调用DatagramSocket对象的方法发送数据
④关闭发送端
代码如下:
请使用的是自己电脑的IP地址 端口号随意 但是 接收方要和发送方的端口号一致

package test_udp; import java.io.IOException; import java.net.*; /** * 描述:练习使用udp的客户端 */ public class Client { public static void main(String[] args) throws IOException { //先创建socket对象 DatagramSocket ds = new DatagramSocket(); byte[] bytes = "udp客户端发送的数据".getBytes(); DatagramPacket dp = new DatagramPacket(bytes,bytes.length,InetAddress.getByName("192.168.1.6"),10000); ds.send(dp); ds.close(); } } UDP接收数据

接收数据的步骤
①创建接收端的Socket对象(DatagramSocket)
DatagramSocket(int port)
②创建一 个数据包,用于接收数据
DatagramPacket(byte] buf, int length)
③调用DatagramSocket对象的方法接收数据
void receive(DatagramPacketp)
④解析数据包, 并把数据在控制台显示
byte[] getData()
int getLength()
⑤关闭接收端
void close()
代码如下:
接收方要和发送方的端口号一致

package test_udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class Server { public static void main(String[] args) throws IOException { //先创建接收对象 DatagramSocket ds = new DatagramSocket(10000); //创建接收的数组 byte[] bytes = new byte[1024]; //创建包 DatagramPacket dp = new DatagramPacket(bytes,bytes.length); //接收数据 ds.receive(dp); //返回收到的数据数组 byte[] data = dp.getData(); //返回实际数组长度 int length = dp.getLength(); String str = new String(data,0,length); System.out.println(str); } }

注意:先启动服务器,然后再启动客户端

ServerSocket中的常用方法

在这里插入图片描述

Socket在Tcp协议中的常用方法

在这里插入图片描述

TCP协议

●传输控制协议 (Transmission Control Protocol)
●TCP协议是面向连接的通信协议, 即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,
它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过"三次握手”
三次握手: TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠
第一次握手,客户端向服务器端发出连接请求,等待服务器确认
第二次握手,服务器端向客户端回送一个响应, 通知客户端收到了连接请求
第三次握手,客户端再次向服务器端发送确认信息,确认连接

TCP通信原理

TCP通信协议是一种可靠的网络协议, 它在通信的男端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一且建立了虚校的网络谜路。两端的程序献可以通过虚拟链路进行通信,Java对基于TCP协议的的网络提供了良好的时装,使用Socket对象来代表两端的通信如口,并通过Socket产生IO流来进行网络通信。

TCP发送数据

发送数据的步骤
1,创建客户端的Socket对象(Socket)
Socket(String host, int port)
2,获取输出流, 写数据
OutputStream getOutputStream()
3,释放资源
vold close()

代码如下:

package test_tcp; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; /** * 描述:实现tcp的发送 */ public class Client { public static void main(String[] args) throws IOException { //创建客户端对象 Socket s = new Socket("192.168.1.6",10000); //创建写入对象 OutputStream os = s.getOutputStream(); os.write("tcp客户端发送的数据".getBytes()); s.close(); } } TCP接收数据

接收数据的步骤
1,创建服务器端的Socket对象(ServerSocket)
ServerSocket (int port)
2,监听客户端连接, 返回一个Socket对象
Socket accept()
3,获取输入流,读数据,并把数据显示在控制台
InputStream getinputstream()
4,释放资源:
void close()

代码如下:

package test_tcp; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { //创建tcp接收对象 ServerSocket ss = new ServerSocket(10000); //获得socket对象 Socket s = ss.accept(); //获得读数据对象 InputStream is = s.getInputStream(); byte[] bytes = new byte[1024]; int len = is.read(bytes); String str = new String(bytes,0,len); System.out.println(str); ss.close(); } }

注意:先启动服务器,然后再启动客户端


作者:流年烟雨绽放在寂寞的晴天



编程基础 网络编程

需要 登录 后方可回复, 如果你还没有账号请 注册新账号