📄 receive.java
字号:
/**
* 模仿停等协议的接受数据方
* @author vincent chou
* @version 2007.6.2 22:10
*/
package vincent;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import java.util.*;
public class Receive
{
public static void main(String[] args)
{
ReceiveFrame aReceiveFrame = new ReceiveFrame();
aReceiveFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aReceiveFrame.setVisible(true);
}
}
/**
* 应答框架
* @author vincent
*
*/
class ReceiveFrame extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
public ReceiveFrame()
{
this.setTitle("接收数据");
this.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
ReceivePanel aReceivePanel = new ReceivePanel();
this.add(aReceivePanel);
}
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}
/**
* 接收框架
* @author vincent
*
*/
class ReceivePanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = -3971113349471090700L;
public ReceivePanel()
{
this.setLayout(new BorderLayout());
/*查询框架*/
JPanel sPanel = new JPanel();
searchLabel = new JLabel("查看是否有信息:");
searchButton = new JButton("check");
searchButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
if (checkMessage())
{
ackButton.setEnabled(true);
nakButton.setEnabled(true);
noneButton.setEnabled(true);
resultArea.setText(data);
deleteData();
}
else
{
resultArea.setText("没有新的数据包到来!");
}
}
});
sPanel.add(searchLabel);
sPanel.add(searchButton);
/*结果框架*/
JPanel resultPanel = new JPanel();
resultArea = new JTextArea(3,20);
resultArea.setEditable(false);
resultArea.setLineWrap(true);
resultPanel.add(resultArea);
/*回复框架*/
JPanel rPanel = new JPanel();
responseLabel = new JLabel("回复选择:");
ackButton = new JButton("ACK");
nakButton = new JButton("NAK");
noneButton = new JButton("NONE");
ackButton.setEnabled(false);
nakButton.setEnabled(false);
noneButton.setEnabled(false);
responseAction rAction = new responseAction();
ackButton.addActionListener(rAction);
nakButton.addActionListener(rAction);
noneButton.addActionListener(rAction);
rPanel.add(responseLabel);
rPanel.add(ackButton);
rPanel.add(nakButton);
rPanel.add(noneButton);
this.add(sPanel,BorderLayout.NORTH);
this.add(resultPanel,BorderLayout.CENTER);
this.add(rPanel,BorderLayout.SOUTH);
Runnable rRun = new receiveRunnable();
Thread rThread = new Thread(rRun);
rThread.start();
}
/**
* 应答机制
* @author vincent
*
*/
private class responseAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String rString = event.getActionCommand();
if (rString.equals("ACK"))
storeMessage();
try
{
DatagramSocket ds = new DatagramSocket();
DatagramPacket sendDp = new DatagramPacket(rString.getBytes(),
rString.getBytes().length,address,5000);
ds.send(sendDp);
ds.close();
}
catch (IOException e)
{
e.printStackTrace();
}
resultArea.setText("");
ackButton.setEnabled(false);
nakButton.setEnabled(false);
noneButton.setEnabled(false);
}
}
/**
* 查看是否有新信息到来
* @return true or false
*/
public boolean checkMessage()
{
try
{
BufferedReader in = new BufferedReader(new FileReader("f1.txt"));
String line = null;
if ((line = in.readLine()) != null)
{
StringTokenizer t = new StringTokenizer(line,"|");
data = t.nextToken();
address = InetAddress.getByName(t.nextToken());
port = Integer.parseInt(t.nextToken());
in.close();
return true;
}
else
{
in.close();
return false;
}
}
catch (IOException e)
{
e.printStackTrace();
return false;
}
}
/**
* 存储接收信息到 f3文件
*
*/
public void storeMessage()
{
try
{
PrintWriter out = new PrintWriter(new FileOutputStream("f3.txt",true));
out.println(data + "|"+ address + "|" + port + "|" + Calendar.getInstance());
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void deleteData()
{
try
{
PrintWriter out = new PrintWriter(new FileOutputStream("f1.txt"));
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private JLabel searchLabel;
private JLabel responseLabel;
private JButton searchButton;
private JButton ackButton;
private JButton nakButton;
private JButton noneButton;
private JTextArea resultArea;
private String data;
private InetAddress address;
private int port;
}
/**
* 接收信息线程
* @author vincent
*
*/
class receiveRunnable implements Runnable
{
public void run()
{
receive();
}
/**
* 接收结果
*
*/
public void receive()
{
try
{
while (true)
{
DatagramSocket ds = new DatagramSocket(4678);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
data = (new String(dp.getData())).trim();
address = dp.getAddress().toString();
address = address.substring(1, address.length());
port = dp.getPort();
storeData();
ds.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* 存储接收信息到f1文件
*
*/
public void storeData()
{
try
{
PrintWriter out = new PrintWriter(new FileOutputStream("f1.txt"));
out.println(data + "|"+ address + "|" + port);
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private String data;
private String address;
private int port;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -