📄 send.java
字号:
/**
* 发送数据包一端
* @author vincent chou
* @version 2007.6.3 9:37
*/
package vincent;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
public class Send
{
public static void main(String[] args)
{
SendFrame aSendFrame = new SendFrame();
aSendFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aSendFrame.setVisible(true);
}
}
class SendFrame extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 1L;
public SendFrame()
{
this.setTitle("发送数据");
this.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
SendPanel aSendPanel = new SendPanel();
this.add(aSendPanel);
}
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}
class SendPanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
public SendPanel()
{
this.setLayout(new BorderLayout());
JPanel ipPanel = new JPanel();
ipLabel = new JLabel("IP: ");
portLabel = new JLabel("Port: ");
ipText = new JTextField(10);
portText = new JTextField(5);
ipPanel.add(ipLabel);
ipPanel.add(ipText);
ipPanel.add(portLabel);
ipPanel.add(portText);
JPanel dataPanel = new JPanel();
dataLabel = new JLabel("数据:");
dataArea = new JTextArea(5,20);
dataArea.setLineWrap(true);
JScrollPane dataScroll = new JScrollPane(dataArea);
dataPanel.add(dataLabel);
dataPanel.add(dataScroll);
JPanel buttonPanel = new JPanel();
sendButton = new JButton("send");
checkButton = new JButton("check");
checkButton.setEnabled(false);
sendButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
/*超时计时器*/
outdateTimer = new Timer(10000,new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
JOptionPane.showMessageDialog(null, "传输超时,重传数据!");
outdateTimer.stop();
if (sendMessage())
;
}
});
if (sendMessage())
{
sendButton.setEnabled(false);
ipText.setEditable(false);
portText.setEditable(false);
dataArea.setEditable(false);
checkButton.setEnabled(true);
}
}
});
checkButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
checkAnswer();
}
});
buttonPanel.add(sendButton);
buttonPanel.add(checkButton);
this.add(ipPanel, BorderLayout.NORTH);
this.add(dataPanel, BorderLayout.CENTER);
this.add(buttonPanel,BorderLayout.SOUTH);
SendRunnable sendRun = new SendRunnable();
Thread sendThread = new Thread(sendRun);
sendThread.start();
}
/**
* 发送数据
*
*/
public boolean sendMessage()
{
if ((ipText.getText().trim()).equals("") || (portText.getText().trim()).equals("")
|| (dataArea.getText().trim()).equals(""))
{
JOptionPane.showMessageDialog(null, "请输入IP地址和端口号以及内容");
return false;
}
else
{
try
{
DatagramSocket ds = new DatagramSocket();
String message = dataArea.getText().trim();
DatagramPacket dp = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getByName(ipText.getText()),Integer.parseInt(portText.getText()));
ds.send(dp);
ds.close();
outdateTimer.start();
}
catch (IOException e)
{
e.printStackTrace();
}
return true;
}
}
/**
* 确定数据接收情况
*
*/
public void checkAnswer()
{
try
{
BufferedReader br = new BufferedReader(new FileReader("f2.txt"));
String line = br.readLine();
if (line != null)
{
if (line.equals("NONE"))
{
JOptionPane.showMessageDialog(null, "数据丢失,重传数据!");
outdateTimer.stop();
if (sendMessage())
;
}
else
{
outdateTimer.stop();
ipText.setEditable(true);
portText.setEditable(true);
dataArea.setEditable(true);
dataArea.setText("");
sendButton.setEnabled(true);
checkButton.setEnabled(false);
}
}
else
{
JOptionPane.showMessageDialog(null, "对方未响应,请稍后再试!");
}
br.close();
deleteData();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void deleteData()
{
try
{
PrintWriter out = new PrintWriter(new FileOutputStream("f2.txt"));
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private JLabel ipLabel;
private JLabel portLabel;
private JLabel dataLabel;
private JTextField ipText;
private JTextField portText;
private JTextArea dataArea;
private JButton sendButton;
private JButton checkButton;
private Timer outdateTimer;
}
/**
* 接收信息线程
* @author vincent
*
*/
class SendRunnable implements Runnable
{
public void run()
{
receive();
}
/**
* 接收结果
*
*/
public void receive()
{
try
{
while (true)
{
DatagramSocket ds = new DatagramSocket(5000);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
data = (new String(dp.getData())).trim();
storeData();
ds.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
/**
* 存储反馈信息到f2文件
*
*/
public void storeData()
{
try
{
PrintWriter out = new PrintWriter(new FileOutputStream("f2.txt"));
out.println(data);
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private String data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -