您的位置:首页 > 其它

UDP

2016-09-25 22:44 776 查看
UDP数据报通信

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class UDPChat implements Runnable, ActionListener {
JTextArea showArea;
JLabel lbl1, lbl2, lbl3;
JTextField msgText, sendPortText, receivePortText, IPAddressText;
JFrame mainJframe;
JButton sendBtn, startBtn;
JScrollPane JSPane;
JPanel pane1, pane2;
Container con;
Thread thread = null;
DatagramPacket sendPack, receivePack;
DatagramSocket sendSocket, receiveSocket;
private InetAddress sendIP;
private int sendPort, receivePort;
private byte inBuf[], outBuf[];
public static final int BUFSIZE = 1024;

public UDPChat() {
mainJframe = new JFrame("聊天--UDP协议");
con = mainJframe.getContentPane();
showArea = new JTextArea();
showArea.setEditable(false);
showArea.setLineWrap(true);
lbl1 = new JLabel("接收端口号:");
lbl2 = new JLabel("发送端口号:");
lbl3 = new JLabel("对方的地址:");
sendPortText = new JTextField();
sendPortText.setColumns(5);
receivePortText = new JTextField();
receivePortText.setColumns(5);
IPAddressText = new JTextField();
IPAddressText.setColumns(8);
startBtn = new JButton("开始");
startBtn.addActionListener(this);
pane1 = new JPanel();
pane1.setLayout(new FlowLayout());
pane1.add(lbl1);
pane1.add(receivePortText);
pane1.add(lbl2);
pane1.add(sendPortText);
pane1.add(lbl3);
pane1.add(IPAddressText);
pane1.add(startBtn);
JSPane = new JScrollPane(showArea);
msgText = new JTextField();
msgText.setColumns(40);
msgText.setEditable(false);
msgText.addActionListener(this);
sendBtn = new JButton("发送");
sendBtn.setEnabled(false);
sendBtn.addActionListener(this);
pane2 = new JPanel();
pane2.setLayout(new FlowLayout());
pane2.add(msgText);
pane2.add(sendBtn);
con.add(pane1, BorderLayout.NORTH);
con.add(JSPane, BorderLayout.CENTER);
con.add(pane2, BorderLayout.SOUTH);
mainJframe.setSize(600, 400);
mainJframe.setVisible(true);
mainJframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new UDPChat();
}

@Override
public void actionPerformed(ActionEvent e) {
try {
if (e.getSource() == startBtn) {
inBuf = new byte[BUFSIZE];
sendPort = Integer.parseInt(sendPortText.getText());
sendIP = InetAddress.getByName(IPAddressText.getText());
sendSocket = new DatagramSocket();
receivePort = Integer.parseInt(receivePortText.getText());
receivePack = new DatagramPacket(inBuf, BUFSIZE);
receiveSocket = new DatagramSocket(receivePort);
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
startBtn.setEnabled(false);
sendBtn.setEnabled(true);
msgText.setEditable(true);
} else {
outBuf = msgText.getText().getBytes();
sendPack = new DatagramPacket(outBuf, outBuf.length, sendIP,
sendPort);
sendSocket.send(sendPack);
showArea.append("我说:" + msgText.getText() + "\n");
msgText.setText(null);

}
} catch (UnknownHostException e1) {
showArea.append("无法连接到指定地址\n");
} catch (SocketException e1) {
showArea.append("无法打开指定端口\n");
} catch (IOException e
4000
1) {
showArea.append("发送数据失败\n");
}
}

@Override
public void run() {
String msgstr;
while (true) {
try {
receiveSocket.receive(receivePack);
msgstr = new String(receivePack.getData(), 0, receivePack
.getLength());
showArea.append("对方说:" + msgstr + "\n");
} catch (IOException e1) {
showArea.append("接受数据出错\n");
}
}
}

}


截图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: