当前位置: 首页 > news >正文

网络编程学习一

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(上传文件)

。。。。。。

http://www.lryc.cn/news/13950.html

相关文章:

  • Javascript 立即执行函数
  • 基于Django和vue的微博用户情感分析系统
  • 【C++】IO流
  • 【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练
  • 《自动驾驶规划入门》专栏结语
  • 【数据结构与算法】2.八大经典排序
  • Windows 免安装版mysql,快速配置教程
  • 空间误差分析:统一的应用导向处理(Matlab代码实现)
  • 【C++】引用、内联函数、auto关键字、范围for、nullptr
  • pytest数据驱动
  • OSI七层网络模型
  • 易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res
  • Java 日期处理踩过的坑
  • 一文吃透 Spring 中的IOC和DI(二)
  • 【期末指北】嵌入式系统——选择题(feat. ChatGPT)
  • MyBatis-Plus——代码生成器(3.5.1+版本)
  • 宁盾上榜第五版《CCSIP 2022 中国网络安全行业全景册》
  • 【Linux系统】第七篇:Linux调试器gdb的使用
  • Shell 特殊变量及其含义
  • LeetCode 2396. 严格回文的数字
  • 【RocketMQ】源码详解:Broker启动流程
  • vue事件
  • 研报精选230220
  • kubernetes sd configs配置详解
  • Linux查看文件的命令
  • 如何单独清除某个网页的缓存(reload)
  • 魔兽世界经典怀旧服务器架设教程
  • Interview系列 - 05 Java|Iterator迭代器|集合继承体系|Set List Map接口特性|List实现类区别
  • LeetCode 1769. 移动所有球到每个盒子所需的最小操作数
  • MKS SKIPR V1.0船长版(Voron 2.4 R2)配置简要笔记