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

📄 serverdatagram.java

📁 Java程序设计培训教程2
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import java.util.*;
/**类ServerDatagram是数据报通信的服务器端程序,该程序用于实现:
当有一个客户端连接到端口上时,就新建一个线程,该线程读取当前
路径下thirdFile.txt文件中的内容,每次读取一行,将读取的内容
通过数据报传送到客户端并在客户端显示出来*/
public class ServerDatagram{
	public static void main(String[] args){
		try{
			/*生成一个ServerDataThread类的对象,在ServerDataThread类中实现了数据报通信的服务器端处理*/
			ServerDataThread threadObj = new ServerDataThread();
			/*ServerDataThread类是Thread类的子类,因此threadObj也是一个线程对象*/
			threadObj.start();
		}catch(IOException e){}
	}
}
/**ServerDataThread类是Thread类的子类,用于进行数据报通信*/	
class ServerDataThread extends Thread{
	/*声明一个DatagramSocket对象,初始值为null,用于数据报的接收和发送*/
	protected DatagramSocket socketObj = null;
	/*声明一个BufferedReader类的对象,初值为null,用于创建一个输入流*/
	protected BufferedReader buffObj = null;
	/*声明一个布尔变量existData,用于判断输入流中是否还有数据*/
	protected boolean existData = true;
	/**构造方法ServerDataThread()实例化DatagramSocket对象,并创建输入流*/
	public ServerDataThread() throws IOException{
		/*通过端口将服务器端和客户端连接起来*/
		//socketObj = new DatagramSocket(3325);
		/*进行文件例外处理,因为有可能文件不存在*/
		try{
			/*声明一个FileReader对象,这样服务器端就可以对当前路径下的thirdFile.txt文件进行读取操作*/
			FileReader fileObj = new FileReader("thirdFile.txt");
			/*实例化BufferedReader对象,以提供文件读取的效率*/
			buffObj = new BufferedReader(fileObj);
		}catch(FileNotFoundException e){
			System.err.println("文件对象不存在");
		}
	}
	/**方法run()实现数据报通信*/	
	public void run(){
		/*while循环用于判断当前文件流中是否还存在数据*/
		while(existData)
		{
			try{
				/*声明一个byte类型的数组buf,用于存放数据报中的数据*/
				byte[] buf=new byte[256];
				/*生成一个DatagramPacket对象,用于接收数据报中的数据*/
				DatagramPacket packetObj = new DatagramPacket(buf,buf.length);
				/*接收数据报*/
				//socketObj.receive(packetObj);
				/*声明一个字符串变量tempStr*/
				String tempStr = "";
				/*声明一个字符串变量totalStr,用于存储文件内容*/
				String totalStr = "";
				/*根据文件流对象是否存在进行不同的处理*/
				if(buffObj == null)//文件对象不存在
					tempStr	= "This file Object doesn't exist!";
				else//文件对象存在
				{
					try{
						/*下面的if语句判断文件是否还有数据*/
						while((tempStr = buffObj.readLine())!=null)
						{
							totalStr += tempStr+"\n";
						}
						/*没有数据时,就将文件流关闭*/
						buffObj.close();
						/*将布尔变量赋值为false*/
						existData = false;
						/*给字符串变量赋值,表示文件流到达结尾处*/
						tempStr = "No more data in file.This is the end";
					}catch(IOException e){
						tempStr = "IOException occurred in server.";
					}
				}
				/*将字符串转换成byte型*/
				buf = totalStr.getBytes();
				/*获得数据报对应的IP地址*/
				InetAddress ipAddress=packetObj.getAddress();
				/*获得数据报的端口号*/
				int portObj=packetObj.getPort();
				/*重新实例化DatagramPacket对象,用于发送数据报*/
				packetObj=new DatagramPacket(buf,buf.length,ipAddress,portObj);
				/*发送数据报*/
				socketObj.send(packetObj);
			}catch(IOException e){
				/*如果出现例外,对例外进行跟踪,并输出跟踪信息*/
				e.printStackTrace();
				/*出现例外,将布尔变量existData置为false,以控制while循环*/
				existData = false;
			}
		}
		/*将数据报关闭*/
		socketObj.close();
	}
}
			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -