代码部分
主机一代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;
public class Udp01 { public static void main(String[] args) { new A() ; } }
class A extends JFrame implements Runnable, ActionListener { JTextField outMessage = new JTextField(30); JTextArea inMessage = new JTextArea(12, 20); JButton button = new JButton("发送"); JPanel panel = new JPanel(); A() { setBounds(50, 50, 600, 900); setVisible(true); setTitle("一号机"); this.getRootPane().setDefaultButton(button); button.addActionListener(this); panel.add(outMessage); panel.add(button); add(new JScrollPane(inMessage), BorderLayout.CENTER); add(panel, BorderLayout.NORTH); Thread thread = new Thread(this); validate(); thread.start(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
@Override public void actionPerformed(ActionEvent e) { byte b[] = outMessage.getText().trim().getBytes();
try { InetAddress address = InetAddress.getByName("localhost"); DatagramPacket data = new DatagramPacket(b, b.length, address, 4000); DatagramSocket mail = new DatagramSocket(); mail.send(data); } catch(Exception ee) {} if(e.getSource()==button){ inMessage.append("自己发送:"); inMessage.append(outMessage.getText()+'\n'); outMessage.setText(""); } }
@Override public void run() { DatagramPacket pack = null; DatagramSocket mail = null; byte b[] = new byte [8192]; try { pack = new DatagramPacket(b, b.length); mail = new DatagramSocket(3000); } catch(Exception e) {} while(true) { try { mail.receive(pack); String message = new String(pack.getData(), 0 ,pack.getLength()); inMessage.append("收到数据来自:"+pack.getAddress()+"\n"); inMessage.append(message+"\n"); inMessage.setCaretPosition(inMessage.getText().length()); } catch(Exception e) {} } } }
|
主机二代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import java.net.*;
public class Udp02 { public static void main(String[] args) { new B() ; } } class B extends JFrame implements Runnable, ActionListener {
JTextField outMessage = new JTextField(12) ; JTextArea inMessage = new JTextArea(12, 20) ; JButton button = new JButton("发送") ; JPanel panel = new JPanel() ; B() { setBounds(50, 50, 600, 900) ; setVisible(true) ; setTitle("二号机"); this.getRootPane().setDefaultButton(button); button.addActionListener(this) ; panel.add(outMessage) ; panel.add(button) ; Container con = getContentPane() ; con.add(new JScrollPane(inMessage), BorderLayout.CENTER) ; con.add(panel, BorderLayout.NORTH) ; Thread thread = new Thread(this) ; validate() ; thread.start() ; this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
@Override public void actionPerformed(ActionEvent e) {
byte b[] = outMessage.getText().trim().getBytes() ; try { InetAddress address = InetAddress.getByName("localhost") ; DatagramPacket data = new DatagramPacket(b, b.length, address, 3000) ; DatagramSocket mail = new DatagramSocket() ; mail.send(data) ; } catch(Exception ee) {} if(e.getSource()==button){ inMessage.append("自己发送:"); inMessage.append(outMessage.getText()+'\n'); outMessage.setText(""); } }
@Override public void run() { DatagramPacket pack = null ; DatagramSocket mail = null ; byte b[] = new byte [8192] ; try { pack = new DatagramPacket(b, b.length) ; mail = new DatagramSocket(4000) ; } catch(Exception e) {} while(true) { try { mail.receive(pack) ; String message = new String(pack.getData(), 0 ,pack.getLength()) ; inMessage.append("收到数据来自:"+pack.getAddress()+"\n") ; inMessage.append(message+"\n") ; inMessage.setCaretPosition(inMessage.getText().length()) ; } catch(Exception e) {} } } }
|
获取ip和打开端口
实现两台电脑的通信需要知道对方ip和端口号,然后分别改写对应部分
获取ip方法

打开windows端口方法
防火墙–>高级设置–>新建入站规则–>端口–>选择UDP,填写端口号(一般填写范围1024~49151)–>一直下一步–>完成
详细步骤:
[{"url":"https://npm.elemecdn.com/yanqi1711-picx/20220423/image-20211230085317954.5cyy3husvqo0.webp","alt":""},{"url":"https://npm.elemecdn.com/yanqi1711-picx/20220423/image-20211230085639649.4hi49xi3v120.webp","alt":""},{"url":"https://npm.elemecdn.com/yanqi1711-picx/20220423/image-20211230090217114.2ggu1h0a5o00.webp","alt":""},{"url":"https://npm.elemecdn.com/yanqi1711-picx/20220423/image-20211230090227283.5mqgovg27w00.webp","alt":""},{"url":"https://npm.elemecdn.com/yanqi1711-picx/20220423/image-20211230090253840.2sikgnn4vkg0.webp","alt":""},{"url":"https://npm.elemecdn.com/yanqi1711-picx/20220423/image-20211230090304043.62i3wrtvcgs0.webp","alt":""},{"url":"https://npm.elemecdn.com/yanqi1711-picx/20220423/image-20211230090333804.2udthubripg0.webp","alt":""}]
注意事项
主机一和主机二代码基本一样,只需要改对应ip和端口号就行
参考文献
java 按钮响应回车_swing 设置回车响应按钮的方法_刘慈欣的博客-CSDN博客
Windows 怎么开放指定端口-百度经验 (baidu.com)