代码如下:
udpT.java
package udpT;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
import javax.swing.*;
public class udpT extends JFrame {
List lst=new List(6);
JTextField ipJtf=new JTextField(15);
JTextField msgJtf=new JTextField(20);
JPanel jp=new JPanel();
public udpT()
{
Container c=this.getContentPane();
c.add(jp,BorderLayout.SOUTH);
c.add(lst,BorderLayout.CENTER);
jp.add(ipJtf,BorderLayout.WEST);
jp.add(msgJtf,BorderLayout.EAST);
new Thread(new recMsg(6000)).start();
//内容文本框监听事件
msgJtf.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
sendMsg(msgJtf.getText(),6000);
msgJtf.setText("");
}
}
);
}
//发送函数。定义输入字符串和端口
public void sendMsg(String str,int port)
{
DatagramSocket ds = null;
byte[] buff=null;
buff=str.getBytes();
try {
ds = new DatagramSocket();
DatagramPacket dp=new DatagramPacket(buff,buff.length,
InetAddress.getByName(ipJtf.getText()),port);
ds.send(dp);
//ds.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//定义内部接收类
class recMsg implements Runnable
{
DatagramSocket ds=null;
DatagramPacket dp=null;
String str=null;
int portS=0;
byte[] buff=new byte[1024];
//构造函数,接收端口号
public recMsg(int port)
{
this.portS=port;
}
//重写run方法,实现多线程运行接收程序
public void run() {
try {
ds = new DatagramSocket(portS);
} catch (SocketException e1) {
e1.printStackTrace();
}
byte[] buf=new byte[1024];
while(true){
try{
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
//String data = new String(buf,0,dp.getLength());
//String ip = dp.getAddress().getHostAddress();
//int port = dp.getPort();
// str = ip+" : "+port+"\r\n"+data+"\r\n\r\n";
str="接收信息来自: "+dp.getAddress().getHostAddress()+":"+dp.getPort()
+" 信息内容为: "+new String(dp.getData(),0,dp.getLength());
lst.add(str);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
udpT mf=new udpT();
mf.setTitle("UDP网络聊天程序");
mf.setSize(500, 400);
mf.setVisible(true);
mf.setResizable(false);
}
}