外贸订单从哪里接,成都关键词优化报价,凡客诚品的衣服什么档次,WordPress自定义密码的插件修改片段1
在第一次握手时#xff0c;由《TCP/IP详解》卷二中对tcp计时器的描述中#xff0c;我们可知连接的建立是需要进行判断#xff0c;如果客户端发送了SYN连接请求#xff0c;服务端没有在有限时间内进行恢复#xff0c;就会取消本次连接。
我们使用 setSoTimeout…修改片段1
在第一次握手时由《TCP/IP详解》卷二中对tcp计时器的描述中我们可知连接的建立是需要进行判断如果客户端发送了SYN连接请求服务端没有在有限时间内进行恢复就会取消本次连接。
我们使用 setSoTimeout() 来判断超时时间当超过了我们的计时时间会抛出一个RuntimeException异常我们需要使用 try-catch来捕获这个异常并且输出提示
//调用对象发送数据datagramSocket.send(datagramPacket);datagramSocket.setSoTimeout(75000);System.out.println();System.out.println(接收数据中:...);/*** 在第二次握手中客户端主要会检查两个方面的内容* 检查ACK标志位客户端需要确认服务端发送的确认信息SYN-ACK中的ACK标志位是否已设置。ACK标志位表示服务端确认收到了客户端的握手请求。* 检查确认号ACK客户端需要检查服务端发送的确认信息中的确认号ACK是否正确。确认号应该是服务端发送的初始序列号加1用于告知服务端它已经正确接收到服务端的数据。*///创建数据包用于接收数据byte[] bytes new byte[1024];DatagramPacket datagramPacket2 new DatagramPacket(bytes, bytes.length);datagramSocket.receive(datagramPacket2);//停止计时datagramSocket.setSoTimeout(0);
修改片段二
无论是客户端还是服务端在每次接收信息和数据时需要判断连接请求和传来的数据是否为自己应该接收的。在我们发现不是当前接收方需要接收的数据时该如何处理
判断在服务端第二次握手过程中传来数据是否应该由本服务端接收。是否为本次连接
if (Integer.parseInt(strArr3[0]) ! 1|| Integer.parseInt(strArr3[1]) ! Integer.parseInt(ACK2)|| (Integer.parseInt(strArr3[2]) - 1) ! Integer.parseInt(Seq2)){throw new WrongConnectionException(非本次连接);}
判断若不是为本次连接我采用的方法是抛出一个异常
自定义异常类抛出异常捕获异常(try-catch)
注意该方法不是完全合乎逻辑的因为抛出异常后程序将会停止而且接收到数据后才进行的判断。正常情况下应该在接收前进行判断是否为本次连接的内容如若不是本次连接数据应该忽略本次连接继续等待数据。
创建异常类
package TCP_handShake;public class WrongConnectionException extends Exception{public WrongConnectionException(String Msg) {super(Msg);}
}异常捕获在上一个代码段。
catch (WrongConnectionException e) {System.out.println(异常提醒: e.getMessage());}