JAVA坎坷之路(9 day)

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2022-6-28

/**
* 网络编程
* 网络通信协议
* TCP/IP协议(又称协议簇)
* 是一组用于实现网络协议的通信协议
* 其名称来源于该协议簇的两个重要协议(TCP和IP)
* 基于TCP/IP的参考模型将协议分为4个层次
* 链路层、网络层、传输层、应用层
* 链路层
* 也称为网络接口层 该层负责监视数据在主机和网络之间的交互
* 事实上 TCP/IP本身并未定义该层协议
* 而由参与互连的各网络使用自己的物理层和数据链路层协议与TCP/IP的网络层进行连接
* 网络层
* 也称网络互联层 是整个TCP/IP协议的核心
* 它主要用于将传输的数据进行分组 将分组数据发送到目标计算机或网络
* 传输层
* 主要完成网络程序的通信 在进行网络通信时 可以采用TCP
* 也可以采用UDP
* 应用层
* 主要负责应用程序的协议 如HTTP FTP等
* IP地址和端口号
* 想要使网络中的计算机能够通信 必须给计算机指定一个标识号(IP地址)
* IP地址泛用的版本是IPv4 它由4个字节大小的二进制表示
* 每一个字节用一个十进制数字表示(0-255) 数字间用 . 分开
* A类地址 1-127
* B类地址 128-191
* C类地址 192-223
* 通过IP地址可以访问计算机 如果想访问计算机中的某个应用程序 需要指定端口
* 端口号是用两个字节(16位的二进制)表示
* 它的取值范围0-65535
* 其中0-1023的端口号由操作系统的网络服务占用
* 用户的普通应用程序需要使用1024以上的端口
* 避免操作系统服务端口被其他服务占用
*/

正所谓基础地动山摇
即便上班也要卷
你不卷 怎么加工资
加油(ง •̀_•́)ง 下一个架构师就是你
[滑稽][滑稽][滑稽][滑稽]
12楼
心太凉i 2022-6-28
转行了,去干销售啊
我要死在这个行业里[滑稽][滑稽][滑稽][滑稽]
// DatagramSocket构造方法 没有指定端口号 系统会分配一个没有被其他网络程序使用的端口号
// DatagramSocket datagramSocket = new DatagramSocket();
// DatagramSocket构造方法 指定端口号
// DatagramSocket datagramSocket = new DatagramSocket(8080);
// DatagramSocket构造方法 指定端口号 和指定IP地址
DatagramSocket datagramSocket = new DatagramSocket(8080,InetAddress.getLocalHost());
// 该方法用于将接收到的数据填充到DatagramSocket数据包中
// 在接收到数据之前会一直处于阻塞状态 只有接收到数据包时 该方法才会返回
byte[] bytes = new byte[1024];
datagramSocket.receive(new DatagramPacket(bytes,10));
// 该方法用于发送DatagramPacket数据包
// 发送的数据包中包含将要发送的数据 数据的长度 远程主机的IP地址和端口号
datagramSocket.send(new DatagramPacket(bytes,10));
// 关闭当前Socket 通知驱动程序释放为这个Socket保留的资源
datagramSocket.close();
15楼
心太凉i 2022-6-28
去吧,你不知道多内卷
// 端口被占用问题
// 在命令行界面输入netstat命令查看当前计算机端口占用情况

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Huluxia{
public static void main(String[] args) throws Exception{

byte[] bytes = new byte[1024];

DatagramSocket socket = new DatagramSocket(8080);

DatagramPacket packet = new DatagramPacket(bytes,bytes.length);

System.out.println("等待数据");

socket.receive(packet);

String str = new String(packet.getData());

System.out.println(str);

socket.close();

}
}
class Send{
public static void main(String[] args)throws Exception {

DatagramSocket socket = new DatagramSocket(8081);

String str = "哈哈,这是我发送的数据";

byte[] bytes = str.getBytes();

DatagramPacket packet = new DatagramPacket(bytes,bytes.length,InetAddress.getByName("localhost"),8080);

socket.send(packet);

socket.close();
}
}
[滑稽][滑稽][滑稽]
跟他们卷
卷死他们
晚点更新
睡个觉[滑稽][滑稽][滑稽]
/**
* TCP通信
* java提供了两个用于实现TCP的类
* ServerSocket和Socket类
* ServerSocket 表示服务器
* Socket 表示客户端
* 通信时 必须先由客户端去连接服务器端才能实现通信
* 服务器端不可主动连接客户端
* 并且服务器端程序需要事先启动 等待客户端的连接
*/
// ServerSocket的构造方法
// 不带参数的构造方法 该方法创建的对象不与任何端口绑定
// 这样的ServerSocket对象所创建的服务器端没有监听任何端口 不能直接使用
// 还需要继续调用bind方法将其绑定到指定的端口号上 才可以正常使用
ServerSocket socket1 = new ServerSocket();
// 带参数的构造方法
// 绑定一个指定的端口号 端口号可以指定为0 此时系统会分配一个还没有被其他网络程序使用的端口号
// 由于客户端需要根据指定的端口号来访问服务器端程序 因此端口号随机分配的情况并不常用
// 通常会让服务器程序监听一个指定的端口
ServerSocket socket = new ServerSocket(8080);
// 带两个参数的构造方法
// 该参数用于指定在服务器忙时
// 可以与之保持连接请求的等待客户端数量 如果没有指定这个参数 默认为50
ServerSocket socket2 = new ServerSocket(8080,100);
// 带三个参数的构造方法
// 该参数用于指定相关的IP地址
// 该构造方法适用于计算机上有多块网卡和多个IP的情况 对于一般只有一块网卡 就不用专门指定
ServerSocket socket3 = new ServerSocket(8080,100, InetAddress.getByName("localhost"));
// 该方法用于等待客户端的连接 在客户端连接之前会一直处于阻塞状态
// 如果有客户端连接 就会返回一个与之对应的Socket对象
Socket accept = socket2.accept();
System.out.println(accept);
// 该方法用于返回一个InetAddress对象 该对象中封装了ServerSocket绑定的IP地址
InetAddress inetAddress = socket2.getInetAddress();
System.out.println(inetAddress.getAddress());
// 该方法用于判断ServerSocket对象是否为关闭状态
// 如果是关闭状态 则返回true 否则返回false
boolean closed = socket2.isClosed();
System.out.println(closed);
// 该方法用于将ServerSocket对象绑定到指定的IP地址和端口号
// 其中参数封装了IP地址和端口号
// socket2.bind(end);
/**
* Socket
*/
// Socket的构造方法
// 无参数
// 没有指定端口和IP 也就没有连接服务器 还需要调用connect方法 才能完成与指定服务器的连接
Socket socket = new Socket();
// 带主机地址(IP地址)和端口
// 主机地址接收的是字符串类型
Socket socket1 = new Socket("localhost",8080);
// InetAddress和端口
Socket socket2 = new Socket(InetAddress.getByName("localhost"),8080);
// 常用方法
// 返回一个int类型对象 该对象是Socket对象与服务器连接的端口号
int port = socket.getPort();
System.out.println(port);
// 获取Socket对象绑定的本地IP地址 并将IP地址封装成InetAddress类型的对象返回
InetAddress localAddress = socket.getLocalAddress();
System.out.println(localAddress);
// 关闭Socket连接 结束本次通信 在关闭之前 应将Socket相关的所有输入输出流全部关闭
// 良好的程序应该在执行完毕时释放所有资源
// socket.close();
// 返回一个InputStream类型的输入流对象 如果对象是由服务器端的Socket返回
// 就用于读取客户端发送的数据 反之 用于 读取服务器发送的数据
InputStream inputStream = socket.getInputStream();
System.out.println(inputStream);
// 返回一个outputStream类型的输出流对象 如果对象是由服务器端的Socket返回
// 就用于向客户端发送数据 反之 用于 就向服务器发送数据
OutputStream outputStream = socket.getOutputStream();
System.out.println(outputStream);

评论

登录后才可发表内容
  • 主题

    23

  • 帖子

    325

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0541s Mem:2147Kb