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"); } } } }
截图:
相关文章推荐
- WIN网络编程-UDPServer
- python 通过UDP传输文件
- 使用VLC搭建基于UDP的流媒体服务器
- P2P之UDP穿透NAT的原理与实现(附源代码)【转】
- 可靠UDP传输UDT的使用
- Unix网络编程 卷1 第8章:基本UDP套接字编程(UDP回射客户/服务器程序: main/dg_echo/dg_cli)
- vlc支持udp/rtp组播播放
- Linux网络编程下UDP洪水攻击实例介绍
- Unix网络编程 卷1 第8章: 基本UDP套接字编程(概述及recvfrom/sendto函数)
- C# UDP通讯类 多线程方式
- UDP数据包大小问题
- TCP和UDP总结
- Linux下的UDP编程
- <摘录>详谈高性能UDP服务器的开发
- TCP、UDP、HTTP、SOCKET之间的区别
- UDP广播的方式收发数据(C#)
- UDP与TCP区别
- Android客户端和服务器以TCP&&UDP方式互通之Socket通信原理
- 用UDP协议实现广播通信
- keil RTX TCP/UDP 报错