论坛首页 入门技术论坛

简单的UDP 聊天室

浏览 2884 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-26  

刚学习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 调换就可以了。
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics