⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 communicationserver.java

📁 利用UDP实现网络聊天室
💻 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 + -