⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdtserver.java

📁 本程序可在局域网内实现聊天、传送文件功能
💻 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 + -