TCP的socket的API

关键的两个类
1)ServerSocket

该类专门给服务器用的,这个构造方法传入端口进行连接

accept相当于是接听操作,进行连接

close关闭当前套接字,当socket对象与进程的生命周期不一致时需要提前释放资源,就需要调用close

为什么UDP的客户端服务器中没有这个close方法,因为这个socket的生命周期是与进程一样的,只要服务器运行这,socket就不能释放,当进程结束的时候,持有的资源都会全部释放,包括占有的内存和文件描述符表

2)Socket

客户端和服务器都要用,TCP传输的是字节流,就是传输字节

根据上述的构造方法,创立一个socket对象就能够和服务器建立连接,相当于拨号操作

这个方法可以获取到socket内部的流对象,通过InputStream,OutputStream进行read和write操作对网卡进行操作

获取到对应的端口号和IP地址

等待客户端发送请求,服务器与客户端建立连接之后,返回一个socket对象,如果没有客户端发送请求就会阻塞 

TCP处理连接中接收请求的当遇到空白符的时候才会读取完毕,使用这个scanner直接收到的就是字符串,如果使用inputstream的read()方法还需要将字节转化为字符串,客户端在发送请求的时候,必须在每个请求的末尾加上空白符,这个要求是程序员之间通信细节的约定,TCP是按照字节的方式来进行传输的,实际上我们希望若干个字节能构成一个应用层的数据报,区分一个应用层的数据报就是通过空白符来进行分割

空白符是一类统称,空格,换行回车,制表符,翻页符...

响应也加一个空白符,这样就能区分出一个完整的响应,一个请求对应一个响应,因为这是TCP传输的普遍问题,发请求和返回响应都需要考虑分隔符

阻塞等待请求的到达,1)请求到了有明确的分隔符返回true,2)TCP连接断开了返回false

当单独启动服务器没有启动客户端时,会在accept处产生阻塞,

当启动客户端之后服务器便会解除阻塞接收客户端发来的请求

当结束客户端时,会在服务器程序控制台打印客户端下线,当强制结束客户端进程时,或者调用socket.close()方法时,操作系统内核就会感知到,从而TCP断开连接流程(触发四次挥手)

代码案例

客户端

服务器

上述代码还存在一定问题

1) clientSocket没有关闭,会不断浪费文件描述符表,在客户端返回请求会false的时候将对象进行close方法关闭,但是如果其他地方出现异常就无法关闭,所以在finally中写入close方法是最稳妥的

2)当前服务器只能给一个客户端提供服务,无法给多个客户端提供服务,第二个客户端启动发送请求就会发送阻塞,第一个客户端下线之后服务器可以立马感知到第二个客户端上线并且发送请求

修改方法:

 由于主线程接收到客户端的连接之后变为客户端提供服务,这是在主线程中处理连接并未第一个客户端提供服务所以第二个客户端会阻塞等待,这是单线程,此时运用多线程的知识,每接收到一个客户端的连接,创建一个新线程在新线程中执行处理连接客户端任务,此时主线程的任务是与客户端建立连接,t线程的任务是为客户端提供服务,使服务器能为多个客户端提供服务

还可以通过线程池的方式来进行创建线程

问题解决了,两个服务器,两个不同的端口

上述通过线程池不断创建线程可能回到系统创建的线程太多,承受不住从而使电脑死机,我们的解决方法是IO多路复用和分布式系统

关于IO多路复用

IO多路复用使用一个线程同时管理多个socket对象,这些socket对象往往不会同时有数据需要处理,而是同一时刻,只有很少的socket需要处理数据,这个IO多路复用,是操作系统内核为我们提供的,我们直接使用api即可,

在Java中提供了NIO这样的类:大致方法流程创建一个NIO类的对象去管理socket对象,添加回调,等到socket可读的时候,调用回调函数来进行处理

实现的TCP翻译服务器

技术要点

1)重写process方法,处理请求的方法加上一个'\n'表示空白符,能够判断出到哪里是一个完整的请求,这是TCP的需要注意到事项

2)翻译的数据结果是HashMap

3)通过继承父类TcpEchoServer

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Modbus是一种通信协议,它是用于工业控制系统的最普遍的通信协议之一。Modbus TCP则是一种基于TCP/IP协议的Modbus通信方式,它可以在以太网上进行数据传输和通信控制。为了建立TCP连接,应用程序可以使用Socket APISocket是一种通信机制,它提供了网络上信息传输的抽象概念。 Modbus TCP使用Socket API中的TCP套接字,这是一种面向连接的可靠数据流协议。TCP套接字提供了连接性,有序性,可靠性和流控制等特性,确保了Modbus TCP通信的稳定性和可靠性。在Modbus TCP通信中,通信双方需要事先建立TCP连接,然后在这个连接上使用Modbus消息进行通信。 使用Modbus TCPSocket API,可以实现远程监控和控制,例如可以远程控制PLC或传感器,读取实时数据。除此之外,还可以通过Modbus TCPSocket API实现数据记录和报告,以及故障诊断和预测等功能。因此,Modbus TCPSocket API是现代工业控制系统中必不可少的通信和网络技术。 ### 回答2: Modbus是一种通信协议,而TCP则是一种网络传输协议,二者可以组合使用,形成Modbus TCP协议,以实现通过网络连接的设备间的数据通信。 Socket通常指网络资源的标识符,它包含了访问网络资源所需的信息和参数,如IP地址、端口号等。TCP Socket则是用于TCP连接的一种Socket类型,它实现了TCP协议中的连接、数据传输和关闭等功能。 在Modbus TCP协议中,数据是通过TCP Socket传输的。设备通过TCP Socket连接到网络,然后通过Modbus TCP消息格式进行通信,可以完成数据的读、写、读写等操作。TCP Socket作为Modbus TCP协议的支持,实现了设备之间的高效、可靠的数据传输。 总之,Modbus TCPSocket TCP是两种不同的协议,但它们之间可以组合使用,构成高效、可靠的网络数据通信和控制系统。 ### 回答3: Modbus TCPSocket TCP是两种不同的通讯协议,它们之间没有直接的联系也不是互相替代的关系。 Modbus TCP是基于TCP/IP协议的Modbus协议的一种实现方式,Modbus是一种常见的工业控制设备间通讯协议,包括串行、以太网和其他网络通讯方式。而Modbus TCP则是采用TCP/IP协议在以太网上实现的基于Modbus协议的通讯方式,具有广泛的应用场景,例如自动化和工程控制、制造业自动化等领域。 Socket TCP是一种常用的网络通讯协议,它是一种全双工、面向连接、基于字节流的网络协议,用于实现网络间的数据传输。Socket TCP支持客户端和服务器的通讯,客户端可以向服务器发起连接请求并发送数据,而服务器则接受连接请求并处理客户端发来的数据。Socket TCP也是一种广泛应用于通讯领域的协议,例如基于TCP/IP协议的Web应用、实时控制器、通讯服务器等。 总之,Modbus TCPSocket TCP是两种不同的通讯协议,它们都有各自的应用场景和优势。使用时需要根据具体情况进行选择,或者结合两种协议进行联合应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值