JAVA 网络编程(4) SOCKET UDP 单播聊天示例

单播是UDP支持的一种
单播的时候,作为接收方要指定自己的接收端口。作为发送方,发送的报文要指定接收者的IP地址和port
下面的示例代码,只要在两台电脑启动的程序都是将目的地址指向对方的IP,端口互换,就可以两个聊天窗口发送消息


/*** UDP单播聊天示例*/
public class ChatJFrame extends JFrame implements ActionListener
{private String userName;private InetAddress destAddr;private int destport;     private JTextArea rcvTextArea;private JTextField sendTextField;/*** @param userName 用户名* @param host 对方的IP地址* @param destHost 对方的端口* @param rcvPort 接收的端口* @throws Exception*/public ChatJFrame(String userName, String destHost, int destPort, int rcvPort){try(DatagramSocket socket = new DatagramSocket(rcvPort);) {this.setTitle(userName+":"+InetAddress.getLocalHost()+":"+rcvPort);this.setBounds(320, 240, 360, 240);this.setDefaultCloseOperation(3);this.rcvTextArea = new JTextArea();this.getContentPane().add(new JScrollPane(rcvTextArea));JPanel panel = new JPanel();this.getContentPane().add(panel,"South");this.sendTextField = new JTextField(10);sendTextField.addActionListener(this);panel.add(sendTextField);JButton button_send = new JButton("send");panel.add(button_send);button_send.addActionListener(this);this.setVisible(true);this.userName = userName;this.destAddr = InetAddress.getByName(destHost);this.destport = destPort;rcvTextArea.append("user:"+userName+"\r\n"+"本机接受端口为"+rcvPort+"\n"+"本机发送的目的端口为"+destPort+"\n"+"本机发送的目的IP为"+destAddr+"\n");byte data[] = new byte[512];DatagramPacket pack = new DatagramPacket(data, data.length);while(socket!=null){socket.receive(pack);int length = pack.getLength();String message = new String(pack.getData(),0,length);rcvTextArea.append(message+"\r\n");}} catch (Exception e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {{byte buffer[] = (userName+":"+sendTextField.getText()).getBytes();//convert the string to bytetry(DatagramSocket socket = new DatagramSocket();) {DatagramPacket pack = new DatagramPacket(buffer, buffer.length,destAddr,destport);socket.send(pack);rcvTextArea.append("I:"+sendTextField.getText()+"\n");sendTextField.setText("");} catch (Exception e2) {e2.printStackTrace();}}}public static void main(String arg[]) throws Exception{new Thread(()->{new ChatJFrame("n", "localhost", 3001, 3002);}).start();//new Thread(()->{new ChatJFrame("m", "localhost", 3002, 3001);}).start();}
}




本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部