网络编程学习一
创始人
2024-05-26 08:58:35
0

1、初识网络编程

2、网络编程三要素

3、三要素(IP)

4、IPV4的一些小细节

5、Inetaddress类的使用

package com.leitao.demo.network;import java.net.InetAddress;
import java.net.UnknownHostException;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class IntAddress {public static void main(String[] args) throws UnknownHostException {//1.获取InetAddress的对象//IP的对象 一台电脑的对象InetAddress address = InetAddress.getByName("DESKTOP-C280N7F");System.out.println(address);String hostName = address.getHostName();System.out.println(hostName);String ip = address.getHostAddress();System.out.println(ip);}
}

6、端口号

7、协议

8、UDP协议(发送数据)

package com.leitao.demo.network;import java.io.IOException;
import java.net.*;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class UDPDemo {public static void main(String[] args) throws IOException {//1.创建DatagramSocket对象(快递公司)/*** 细节:*      绑定端口,以后我们就是通过这个端口往外发送* 空参:所有可用的端口中随机一个进行使用* 有参:指定端口号进行绑定*/DatagramSocket socket = new DatagramSocket();//2.打包数据String str = "woshinidie!";byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");int port = 10010;DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);//3.发送数据socket.send(packet);//4.释放数据socket.close();}
}

9、UDP协议(接收数据)

package com.leitao.demo.network;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class UDPReceiveDemo {public static void main(String[] args) throws IOException {//1.创建DatagramSocket对象(快递公司)/*** 细节:*      在接收的时候,一定要绑定端口*      而且绑定的端口,一定要跟发送的端口保持一致*/DatagramSocket datagramSocket = new DatagramSocket(10010);//2.接收数据包byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);/*** receive()该方法是阻塞的* 程序执行到这一步的时候,会在这里死等* 等发送端发送消息*/System.out.println("1111111");datagramSocket.receive(datagramPacket);System.out.println("22222222");//3.解析数据包byte[] data = datagramPacket.getData();int length = datagramPacket.getLength();InetAddress address = datagramPacket.getAddress();int port = datagramPacket.getPort();System.out.println("接受数据到" + new String(data,0,length));System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个端口发出的");//4.释放资源datagramSocket.close();}
}

10、UDP练习(聊天室)

发送端

package com.leitao.demo.network;import java.io.IOException;
import java.net.*;
import java.util.Scanner;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class SendMessageDemo {public static void main(String[] args) throws IOException {//1.创建对象DatagramSocket的对象DatagramSocket ds = new DatagramSocket();//2.打包数据Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入信息:");String str = sc.nextLine();if ("886".equals(str)){break;}byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");int port = 10010;DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);//3.发送数据ds.send(dp);}//4.释放资源ds.close();}
}

接收端

package com.leitao.demo.network;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class ReceiveMessageDemo {public static void main(String[] args) throws IOException {//1.创建对象DatagramSocket的对象DatagramSocket ds = new DatagramSocket(10010);//2.接收数据包byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);while (true) {ds.receive(dp);//3.解析数据包byte[] data = dp.getData();int length = dp.getLength();String ip = dp.getAddress().getHostAddress();String name = dp.getAddress().getHostName();//4.打印数据System.out.println("ip为:" + ip + ",主机名为:" + name + "的人,发送了数据:" + new String(data,0,length));}}
}

11、单播、组播、广播

组播:创建MulticastSocket对象

12、TCP协议(发送和接收数据)

客户端

package com.leitao.demo.network;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class TCPSendMessageDemo {public static void main(String[] args) throws IOException {//TCP协议,发送数据//1.创建socket对象/*** 细节:在创建对象的同事会连接服务端*      如果连不上,代码会报错*/Socket socket = new Socket("127.0.0.1", 10010);//2.可以从连接通道中获取输出流OutputStream os = socket.getOutputStream();//写出数据os.write("123aaa".getBytes());//3.释放资源os.close();socket.close();}
}

服务端

package com.leitao.demo.network;import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class TCPReceiveMessageDemo {public static void main(String[] args) throws IOException {//TCP协议,接收数据//1.创建对象ServerSocketServerSocket serverSocket = new ServerSocket(10010);//2.监听客户端的连接Socket accept = serverSocket.accept();//3.从连接通道中获取输入流读取数据InputStream inputStream = accept.getInputStream();int b;while ((b = inputStream.read()) != -1) {System.out.println((char) b);}//4.释放资源accept.close();inputStream.close();}
}

13、TCP协议(中文乱码问题)

将字节流转化为字符流即可

package com.leitao.demo.network;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/15* @Version V1.0**/
public class TCPReceiveMessageDemo {public static void main(String[] args) throws IOException {//TCP协议,接收数据//1.创建对象ServerSocketServerSocket serverSocket = new ServerSocket(10010);//2.监听客户端的连接Socket accept = serverSocket.accept();//3.从连接通道中获取输入流读取数据InputStream inputStream = accept.getInputStream();InputStreamReader isr = new InputStreamReader(inputStream);int b;while ((b = isr.read()) != -1) {System.out.println((char) b);}//4.释放资源accept.close();inputStream.close();}
}

14、TCP协议(代码细节)

15、三次握手和四次挥手

16、综合练习01(多发多送)

Client 客户端

package com.leitao.demo.network.test1;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/16* @Version V1.0**/
public class Client {public static void main(String[] args) throws IOException {//1.创建Socket对象并连接服务端Socket socket = new Socket("127.0.0.1", 10010);//2.写出数据Scanner sc = new Scanner(System.in);OutputStream os = socket.getOutputStream();while (true) {System.out.println("请输入您要发送的信息:");String str = sc.nextLine();if ("886".equals(str)) {break;}os.write(str.getBytes());}//3.释放资源socket.close();}
}

Server 服务器

package com.leitao.demo.network.test1;import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/16* @Version V1.0**/
public class Server {public static void main(String[] args) throws IOException {//1.创建对象绑定10010端口ServerSocket ss = new ServerSocket(10010);//2.等待客户端来连接Socket socket = ss.accept();//3.读取数据InputStreamReader isr = new InputStreamReader(socket.getInputStream());int b;while ((b = isr.read()) != -1) {System.out.print((char) b);}//4.释放资源socket.close();ss.close();}
}

结果

17、综合练习02(接收并反馈)

代码分为两大部分,客服端往服务器发送数据吗,数据的流向要清楚;回写的数据流向也要明白

还需要客户端写一个结束标记,不然客户端read方法会一直等待接收数据

客户端

package com.leitao.demo.network.test2;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/20* @Version V1.0**/
public class Client {public static void main(String[] args) throws IOException {//1.创建Socket对象并连接服务器Socket socket = new Socket("127.0.0.1",10010);//2.写出数据String str = "你好,我是帅哥";OutputStream os = socket.getOutputStream();os.write(str.getBytes());//写出一个结束标记socket.shutdownOutput();//3.接收服务端回写的数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);int b;while ((b = isr.read()) != -1) {System.out.print((char)b);}//释放资源socket.close();}
}

服务器

package com.leitao.demo.network.test2;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/*** @Description: TODO* @Author LeiTao* @Date 2023/2/20* @Version V1.0**/
public class Server {public static void main(String[] args) throws IOException {//1.创建对象并绑定端口ServerSocket ss = new ServerSocket(10010);//2.等待客户端连接Socket socket = ss.accept();//3.socket 中获取输入流读取数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);int b;/*** 细节:* read方法会从连接通道中读取数据* 但是,需要有一个结束标记,此处的循环才会停止* 否则,程序就会一直停在read方法这里,等待读取接下来的数据*/while ((b = isr.read()) != -1) {System.out.print((char)b);}//4.回写数据String str = "很帅吗";OutputStream os = socket.getOutputStream();os.write(str.getBytes());//释放资源socket.close();ss.close();}
}

18、综合练习03(上传文件)

。。。。。。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...