Java SE 宋红康 days04-高级篇-网络编程

1. Socket:端口号与IP地址的组合得出一个网络套接字;

2. 计算机网络中实现通信必须有一些约定,即通信协议:对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。

3. TCP 和 UDP

  TCP 协议:

    使用TCP协议前,须先建立TCP连接,形成传输数据通道

    传输前,采用“ 三次握手”方式,点对点通信,是可靠的

    TCP协议进行通信的两个应用进程:客户端、服务端。

    在连接中可进行大数据量的传输

    传输完毕,需释放已建立的连接,效率低

  UDP 协议:

    将数据、源、目的封装成数据包,不需要建立连接

    每个数据报的大小限制在64K内

    发送不管对方是否准备好,接收方收到也不确认,故是不可靠的

    可以广播发送

    发送数据结束时无需释放资源,开销小,速度快

4. 网络编程例题(InputStream.read()是阻塞式方法,需要手动shutdown告知其已经传输结束,才可以退出循环)

  客户端

复制代码
// 客户端
Socket socket = null;
OutputStream os = null;
// 1.创建Socket对象,指明服务端的ip和端口号
InetAddress inet = InetAddress.getByName("127.0.0.1");
socket = new Socket(inet, 11129);
// 2.获取一个输出流,用于输出数据
os = socket.getOutputStream();
// 3.写出数据的操作
os.write("你好我是.....".getBytes());
// 4.资源关闭,按照声明逆序关闭
复制代码

  服务端

复制代码
// 服务器端
ServerSocket ss = null;
Socket socket = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
// 1.创建服务器端的ServerSocket,指明自己的端口号
ss = new ServerSocket(11129);
// 2.调用accept()标识接收来自于客户端的socket
socket = ss.accept();
// 3.获取输入流
is = socket.getInputStream();

// 4.获取输入流中的数据

// 不建议,可能会有乱码
// byte[] buffer = new byte[20];
// int len;
// while ((len = is.read(buffer)) != -1) {
//     String str = new String(buffer, 0, len);
//     System.out.println(str);
// }

// ByteArrayOutputStream中存在一个数组,长度不够会自动往外扩
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[5];
int len;
while ((len = is.read(buffer)) != -1) {
    baos.write(buffer, 0, len);
}

// 5. 资源关闭
复制代码

5. URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一资源的地址。

  URL的基本结构由5部分组成:< 传输协议>://< 主机名>:< 端口号>/< 文件名>#片段名?参数列表

 

posted @   LinxhzzZ  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示