📄 rdtserver.java
字号:
package org.tuna.net.rdt;
import java.net.*;
public class RdtServer extends Thread implements DataSort
{
DatagramSocket srvskt;
int port;
RdtUnit newUnit; //应新的请求而生成的RDT单元
RdtUnitManager rdtmgr;
private boolean stop = false;
/**
* 以指定端口创建RDT服务端
* @param p 端口
*/
public RdtServer(int p) throws Exception
{
srvskt = new DatagramSocket(p);
port = p;
rdtmgr = new RdtUnitManager(this);
start();
}
// ------ Overided Methods ------
public void run()
{
try{
while(!stop){
byte[] rcv = new byte[530];
DatagramPacket rcvpkt = new DatagramPacket(rcv, rcv.length);
srvskt.receive(rcvpkt);
switch(rcv[0]){
case PKT_SH_1 : //客户端的第一次握手
rdtmgr.first(rcvpkt);//System.out.println("first");
break;
case PKT_SH_3 : //客户端的第三次握手
rdtmgr.third(rcvpkt);//System.out.println("third");
break;
default : //除握手以外的信息,包括非法信息,但RDT单会处理
rdtmgr.newData(rcvpkt);
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
// ------ Public Methods ------
/**
* 上层应用调用此方法,等待客户端的连接
* @return 连接建立后,生成RdtUnit,用以和客户端通信
*/
public RdtUnit accept()
{
rdtmgr.acceptable(true); //可以对第一次握手应答
synchronized(this){ //等待客户端的握手信息
try{
wait();
}
catch(Exception e)
{ e.printStackTrace(); }
}
rdtmgr.acceptable(false); //禁止对第一次握手做出响应
return newUnit;
}
public void close() throws Exception
{
shut();
srvskt.close();
}
// ------Private Methods ------
private void shut()
{
stop = true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -