package udp.chatroom;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class UdpServer extends JFrame implements Runnable{
JPanel panel;
JTextArea ta;
JTextField tf_host,tf_nkname,tf_msg;
JButton button;
DatagramSocket ds1,ds2;
DatagramPacket out,in;
byte[] sdata;
byte[] rdata;
InetAddress ad;
Thread tt;
String mm;
JScrollPane jScrollPane;
public UdpServer(String ss) {
super(ss);
panel = new JPanel();
ta=new JTextArea(12, 40);
jScrollPane =new JScrollPane(ta);
panel.add(jScrollPane);
panel.add(new JLabel("主机名:"));
tf_host=new JTextField("127.0.0.1", 15);
panel.add(tf_host);
panel.add(new JLabel(" 昵称:"));
tf_nkname=new JTextField("孙悟空",13);
panel.add(tf_nkname);
panel.add(new JLabel("消息:"));
tf_msg=new JTextField("This is a text.", 35);
panel.add(tf_msg);
button =new JButton("发送");
panel.add(button);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
sdata=(tf_nkname.getText().trim()+" 说:"+tf_msg.getText().trim()).getBytes();
ds1 = new DatagramSocket();
ad = InetAddress.getByName(tf_host.getText().trim());
out = new DatagramPacket(sdata, sdata.length,ad,888);///888
ds1.send(out);
ta.append(tf_nkname.getText().trim()+" 说:"+tf_msg.getText().trim()+"\n");
} catch (Exception e1) {
ta.append("error");
}
}
});
tt = new Thread(this);
tt.start();
//set frame
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(400,400,480,400);
this.add(panel);
this.setVisible(true);
}
public static void main(String[] args) {
new UdpServer("Chat Room Server");
}
@Override
public void run() {
rdata =new byte[1024];
try {
in =new DatagramPacket(rdata, rdata.length);
ds2 = new DatagramSocket(666);//监听666
} catch (Exception e) {
ta.append("error");
}
while (true) {
try {
ds2.receive(in);
mm=new String(in.getData(),0,in.getLength());
ta.append(mm+"\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package udp.chatroom;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class UdpClient extends JFrame implements Runnable{
JPanel panel;
JTextArea ta;
JTextField tf_host,tf_nkname,tf_msg;
JButton button;
DatagramSocket ds1,ds2;
DatagramPacket out,in;
byte[] sdata;
byte[] rdata;
InetAddress ad;
Thread tt;
String mm;
JScrollPane jScrollPane;
public UdpClient(String ss) {
super(ss);
panel = new JPanel();
ta=new JTextArea(12, 40);
jScrollPane =new JScrollPane(ta);
panel.add(jScrollPane);
panel.add(new JLabel("主机名:"));
tf_host=new JTextField("127.0.0.1", 15);
panel.add(tf_host);
panel.add(new JLabel(" 昵称:"));
tf_nkname=new JTextField("猪八戒",13);
panel.add(tf_nkname);
panel.add(new JLabel("消息:"));
tf_msg=new JTextField("This is a text.", 35);
panel.add(tf_msg);
button =new JButton("发送");
panel.add(button);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
sdata=(tf_nkname.getText().trim()+" 说:"+tf_msg.getText().trim()).getBytes();
ds1 = new DatagramSocket();
ad = InetAddress.getByName(tf_host.getText().trim());
out = new DatagramPacket(sdata, sdata.length,ad,666);
ds1.send(out);
ta.append(tf_nkname.getText().trim()+" 说:"+tf_msg.getText().trim()+"\n");
} catch (Exception e1) {
ta.append("error");
}
}
});
tt = new Thread(this);
tt.start();
//set frame
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(400,400,480,400);
this.add(panel);
this.setVisible(true);
}
public static void main(String[] args) {
new UdpClient("Chat Room Client");
}
@Override
public void run() {
rdata =new byte[1024];
try {
in =new DatagramPacket(rdata, rdata.length);
ds2 = new DatagramSocket(888);//监听888
} catch (Exception e) {
ta.append("error");
}
while (true) {
try {
ds2.receive(in);
mm=new String(in.getData(),0,in.getLength());
ta.append(mm+"\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}