刚学习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 调换就可以了。