📄 serverdatagram.java.bak
字号:
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对象,用于发送数据报*/
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 + -