📄 communicationserver.java
字号:
package communicationserver;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;import java.io.*;/** * <p>Title: 服务器端UDP通讯程序</p> * <p>Description: 用于服务器端,实现与客户端UDP通讯</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: 北京师范大学计算机系</p> * @author 孙一林 * @version 1.0 */public class CommunicationServer extends JFrame { JPanel contentPane; JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); JTextField jTextField1 = new JTextField(); JTextArea jTextArea1 = new JTextArea(); private DatagramSocket sendSocket,receiveSocket;//声明发送数据报Socket和接收数据报Socket private DatagramPacket sendPacket,receivePacket;//声明发送数据报文包和接收数据报文包 private String name,name1; /**Construct the frame*/ public CommunicationServer() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } /**Component initialization*/ private void jbInit() throws Exception { jLabel1.setText("通讯记录:"); jLabel1.setBounds(new Rectangle(4, 4, 67, 29)); //setIconImage(Toolkit.getDefaultToolkit().createImage(CommunicationServer.class.getResource("[Your Icon]"))); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(null); this.setSize(new Dimension(400, 200)); this.setTitle("通讯控制台:"); jLabel2.setText("输入通讯内容:"); jLabel2.setBounds(new Rectangle(11, 124, 93, 32)); jTextField1.setText("通讯内容"); jTextField1.setBounds(new Rectangle(118, 125, 269, 30)); jTextField1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { jTextField1_actionPerformed(e); } }); jTextArea1.setText("你好!"); jTextArea1.setBounds(new Rectangle(7, 39, 380, 70)); contentPane.add(jLabel1, null); contentPane.add(jTextArea1, null); contentPane.add(jTextField1, null); contentPane.add(jLabel2, null); try{ sendSocket=new DatagramSocket();//实例化一个发送数据报Socket对象 receiveSocket= new DatagramSocket(8000);//实例化一个接收数据报Socket对象 } catch (SocketException e){ e.printStackTrace(); System.exit(1); } } /**方法waitForPacket用来监听来自于客户端的数据报,当获得数据报后,在文本显示区域显示出来*/ public void waitForPacket(){ while (true){ try{ byte buf[]=new byte[100]; receivePacket=new DatagramPacket(buf,buf.length);//实例化一个接收数据报文包对象 receiveSocket.receive(receivePacket);//以receivePacket为参数,接收数据包 name=receivePacket.getAddress().toString(); if(name1!=name){ jTextArea1.append("\n来自主机:"+name+"\n端口:"+receivePacket.getPort()); } jTextArea1.append("\n客户:\t");//将接收到的数据包中的数据显示出来 byte[] data = receivePacket.getData(); String receivedString = new String(data,0); jTextArea1.append(receivedString); name1=name; } catch(IOException e){ jTextArea1.append("网络通讯出现错误,问题在"+e.toString()); } } } /**Overridden so we can exit when window is closed*/ protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } void jTextField1_actionPerformed(ActionEvent e) { try{ jTextArea1.append("\n服务器:"); String string = jTextField1.getText(); jTextArea1.append(string); byte[] databyte=new byte[100]; string.getBytes(0,string.length(),databyte,0); sendPacket=new DatagramPacket(databyte,string.length(),InetAddress.getByName(name),8001); sendSocket.send(sendPacket); } catch(IOException ioe){ jTextArea1.append("网络通讯出现错误,问题在"+ioe.toString()); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -