Java--用数据包形式改写多用户聊天程序

题目要求:用数据包形式改写两用户聊天程序
// test1.java
//  用户:小o

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class test1 extends JFrame{
	private JTextField enter;
	private JTextArea display;
	private DatagramSocket socket;
	public test1() {
		super("小o的聊天界面");
		
		
		Container container = getContentPane();
		enter = new JTextField(20);
		enter.addActionListener(
				new ActionListener() {
					public void actionPerformed(ActionEvent event)
					{
						try {
							String message = event.getActionCommand();
							byte data[] = message.getBytes();
							DatagramPacket send1 = new DatagramPacket(data,
									data.length,InetAddress.getLocalHost(),5000);
							displayMessage("\n已发送消息:"+new String(send1.getData(),0,send1.getLength()));
							
							socket.send(send1);
						}
						catch(IOException ioException){
							ioException.printStackTrace();
							
						}
					}
				}
				);
		JPanel jpanel1 = new JPanel();
		jpanel1.add(new JLabel("输入要发送的信息:"));
		jpanel1.add(enter);
		container.add(jpanel1,BorderLayout.NORTH);
		display = new JTextArea();
		container.add(new JScrollPane(display),BorderLayout.CENTER);
		
		
		
		getContentPane().add( new JScrollPane(display),
				BorderLayout.CENTER);
		setSize(400,300);
		setVisible(true);
		try {
			socket = new DatagramSocket(6000);
		}
		catch(SocketException socketException) {
			socketException.printStackTrace();
			System.exit(1);
		}
	}
	private void waitForPackets() {
		while(true) {
			try {
				
				byte data[] = new byte[100];
				DatagramPacket receive1 = new DatagramPacket(data,data.length);
				socket.receive(receive1);  //等待数据包
				//将接收的数据包显示
				displayMessage("\n小a对你说:"+
				new String(receive1.getData(),0,receive1.getLength())
				);
				
			}
		catch(IOException ioException){
			displayMessage(ioException.toString() + "\n");
			ioException.printStackTrace();
		}
		}
	}
	
	private void sendPacketToClient(DatagramPacket receive1)
	   throws IOException
	   {
		DatagramPacket sendPacket = new DatagramPacket(
				receive1.getData(),receive1.getLength(),receive1.getAddress(),receive1.getPort());
		socket.send(sendPacket);
	   }
	private void displayMessage(final String messageToDisplay)
	{
		SwingUtilities.invokeLater(
				new Runnable() {
					public void run()
					{
						display.append(messageToDisplay);
						display.setCaretPosition(display.getText().length());
					}
				}
				);
	}
	public static void main(String args[])
	{
		test1 app = new test1();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		app.waitForPackets();
	}
}

第二个代码可以说跟第一个一毛一样,改一下第一个代码里的两个端口号(5000,6000倒过来)就可以了。

运行效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值