首页 > 编程语言 >Java SE 宋红康 days04-高级篇-网络编程

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

时间:2022-10-03 16:23:34浏览次数:47  
标签:Java socket buffer len days04 new null 宋红康 Socket

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部分组成:< 传输协议>://< 主机名>:< 端口号>/< 文件名>#片段名?参数列表

 

标签:Java,socket,buffer,len,days04,new,null,宋红康,Socket
From: https://www.cnblogs.com/LinxhzZ/p/16750650.html

相关文章

  • 快速排序 Java代码展示
    我们快速排序的图解放在下面,有一些重复的动作就省略。java代码如下:/***@author:阿久*快速排序*/publicclassSnackOrder{publicstaticvoidmain(Str......
  • JAVA对象的内存解析
    堆(Heap):此内存区域用来存放对象实例栈(Stack): 存储局部变量,局部变量存储有数据类型(boolean,byte,int,short,int,float,long,double)、对象引用(reference类型,是对象在堆内......
  • javaScript--5 javascript json字符串转换
      <!DOCTYPEhtml><html><head><title>JavaScript对象转JSON字符串</title></head><body><script>varjsonObj={"userId":"admin",......
  • JadConfig 注解驱动的java 配置管理包
    JadConfig是graylog开源的一个基于注解驱动的java配置管理包,graylogserver对于配置的管理就是使用了此包JadConfig使用比较简单,但是功能还是很强大的,配置包含了校验......
  • 微软出品自动化神器Playwright,不用写一行代码(Playwright+Java)系列(三) 之 手把手带你
    写在前面官方给的栗子是Junit,但是我还是用TestNG来进行脚本的编写,这里只分享思路,不管是哪个测试框架基本思路都是一样的,喜欢用官方的Junit的,建议查看​​官方文档​​。如何......
  • 还用 !=null 判空?试试 Java 8 的全新写法吧!
    1.API介绍1、Optional(Tvalue),empty(),of(Tvalue),ofNullable(Tvalue)这四个函数之间具有相关性,因此放在一组进行记忆。先说明一下,Optional(Tvalue),即构造函数,它是......
  • javaweb——Filter
    Filter概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。过滤器一般完成一些通......
  • java---数组Arrays类学习
    一.Arrays类1.数组的工具类java.util.Arrays2.由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象,进行一些基本......
  • 第一季:8spring支持的常用数据库事务传播属性和事务隔离级别【Java面试题】
    第一季:8spring支持的常用数据库事务传播属性和事务隔离级别【Java面试题】​​前言​​​​推荐​​​​第一季:8spring支持的常用数据库事务传播属性和事务隔离级别​​​​......
  • 第一季:7Spring Bean的作用域之间有什么区别【Java面试题】
    第一季:7SpringBean的作用域之间有什么区别【Java面试题】​​前言​​​​推荐​​​​第一季:7SpringBean的作用域之间有什么区别​​​​题目​​​​2.6bean的作用域★......