简单的UDP 聊天室

本文提供了一个简单的 Java UDP 聊天室示例程序,通过该示例可以了解如何使用 Java 的 socket 编程实现基本的网络通信功能。程序包括客户端和服务端两部分,能够进行基本的消息发送和接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚学习JAVA socket 时的一个例子,希望对新手有用。

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.awt.event.*;

class Client extends Frame implements Runnable{
	Panel panel;
	TextArea ta;
	TextField tf2,tf_host,tf_name;
	Button b1;
	Label l;
	byte sdata[];
	byte rdata[];
	InetAddress ad;
	DatagramPacket out,in;
	DatagramSocket ds1,ds2;
	String mm;
	Thread tt;
	
	public static void main(String[] args) {
		new Client("华软UDP聊天室");

	}
	public Client(String ss){
		super(ss);
		panel=new Panel();
		ta=new TextArea(12,50);
		panel.add(ta);
		panel.add(new Label("主机:"));
		tf_host=new TextField("127.0.0.1",15);
		tf2=new TextField("This is a text",40);
		b1=new Button("发送消息");
		l=new Label("消息:");
		panel.add(tf_host);
		panel.add(new Label("   昵称:"));
		tf_name=new TextField("猪八戒",10);
		panel.add(tf_name);
		panel.add(l);
		panel.add(tf2);
		panel.add(b1);
		add(panel);	
		setBounds(100,100,400,330);
		setVisible(true);
		validate();
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent dd){
				System.exit(0);
			}
		});
		b1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ss){
				sdata=(tf_name.getText().trim()+" 说:"+tf2.getText().trim()).getBytes();
				try{
					ad=InetAddress.getByName(tf_host.getText().trim());
					out=new DatagramPacket(sdata,sdata.length,ad,666);  //端口666
					ds1=new DatagramSocket();
					ds1.send(out);
					ta.append(tf_name.getText().trim()+" 说:"+tf2.getText()+"\n");
				}
				catch(Exception dd){
					ta.append("error");
				}
			}
		});
		tt=new Thread(this);
		tt.start();
	}
	public void run(){
		rdata=new byte[100];
		try{
			in=new DatagramPacket(rdata,rdata.length);
			ds2=new DatagramSocket(888);  //监听端口888
		}catch(Exception dd){
			ta.append("Error");
			
		}
		while(true){
			try{
				ds2.receive(in);
				mm=new String(in.getData(),0,in.getLength());
				ta.append(mm+"\n");
			}catch(Exception dd){
				ta.append("Error2\n");
			}
		}
	}
	
	
}
 另外一端也很简单,只要把上面的程序端口那里,把666 和888 调换就可以了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值