📄 datagramsserver.java
字号:
import java.io.*;import java.net.*;import java.util.*;public class DatagramsServer { public static void main(String[] args) throws IOException { new QuoteServerThread("SingleServerThread").start(); }}class QuoteServerThread extends Thread { protected DatagramSocket socket = null; //创建DatagramSocket类 protected BufferedReader in = null; //创建文件写入类 protected boolean moreQuotes = true; //标识listwords文件是否还有语句 public QuoteServerThread(String title) throws IOException { super(title); socket = new DatagramSocket(8888); //为DatagramSocket类创建8888端口 try { //创建文件读入类,读入listwords.txt文件的内容 in = new BufferedReader(new FileReader("listwords.txt")); } catch (FileNotFoundException e) { System.err.println("不能打开文件"); } } public void run() { while (moreQuotes) { try { byte[] buf = new byte[200]; //使用byte数组创建数据包 DatagramPacket packet = new DatagramPacket(buf, buf.length); //使用socket接口接收客户端的数据包 socket.receive(packet); //创建dString字符串读取文件的内容 String dString = null; if (in == null) dString = new Date().toString(); else dString = getNextQuote(); //使用getNextQuote()方法获取文件的内容 buf = dString.getBytes(); //将字符串转为Bytes()数组 //根据接收的数据包获取网络地址与端口 InetAddress address = packet.getAddress(); int port = packet.getPort(); //重新创建带有网络地址与端口的数据包 packet = new DatagramPacket(buf, buf.length, address, port); //根据数据包的地址与端口发送数据包 socket.send(packet); } catch (IOException e) { e.printStackTrace(); moreQuotes = false; //当发生异常时,退出发送信息循环 } } socket.close(); //关闭Datagram接口 } //读取文件内容的方法 protected String getNextQuote() { String returnValue = null; try { //读入文件内容 if ((returnValue = in.readLine()) == null) { //如果到了文件的结尾,返回下面的语句 in.close(); moreQuotes = false; //退出发送信息的循环 returnValue = "不要泄气,继续努力."; } } catch (IOException e) { returnValue = "在服务端有错误产生."; //产生异常时,返回这句话 } return returnValue; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -