import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.text.*;
public class Test extends JFrame{
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JLabel lb1=new JLabel();
JLabel lb2=new JLabel("for ligson");
JLabel lb3=new JLabel("IPAddress:");
JLabel lb4=new JLabel("ChatInfo:");
java.awt.List lst=new java.awt.List(10);
JTextField tfIP=new JTextField(15);
JTextField tfInfo=new JTextField(6);
DatagramSocket ds;
Test(){
try{
ds=new DatagramSocket(9999);
}catch(IOException e){
e.printStackTrace();
}
this.setVisible(true);
this.setBounds(200,200,300,400);
//this.setBackground(Color.GREEN);
this.add(p1,"North");
this.add(p2,"South");
this.add(lst,"Center");
this.setTitle("MyChat");
p1.setLayout(new GridLayout(1,2));
p2.setLayout(new GridLayout(2,2));
p1.add(lb1);
p1.add(lb2);
p2.add(lb3);
p2.add(lb4);
p2.add(tfIP);
p2.add(tfInfo);
/*lst.setBackground(Color.BLACK);
lst.setForeground(Color.GREEN);
tfIP.setBackground(Color.BLACK);
tfIP.setForeground(Color.GREEN);
tfInfo.setBackground(Color.BLACK);
tfInfo.setForeground(Color.GREEN);*/
this.pack();
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
tfInfo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String ssInfo=tfInfo.getText();
byte[] buf=ssInfo.getBytes();
String sip=tfIP.getText().trim();
String name=InetAddress.getLocalHost().getHostName();
if(ipTest(sip)&&(ssInfo!=" ")){
InetAddress iip=InetAddress.getByName(sip);
DatagramPacket dp=new DatagramPacket(buf,0,buf.length,iip,9999);
ds.send(dp);
String sInfo=dTime()+"我的信息("+name+"):"+new String(buf,0,dp.getLength());
pprint(sInfo);
lst.add(sInfo,0);
}else if(ssInfo==null){
lb2.setText("内容格式不能为空!");
}
}catch(IOException ee){
ee.printStackTrace();
}
tfInfo.setText(" ");
}
});
new Thread(new Runnable(){
public void run(){
while(true){
try{
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
String sIP=dp.getAddress().getHostAddress().trim();
int sPort=dp.getPort();
String name=dp.getAddress().getHostName();
String sInfo=dTime()+"来自"+sIP+"("+name+")的信息(端口号:"+sPort+"):"+new String(buf,0,dp.getLength());
String localIP=InetAddress.getLocalHost().getHostAddress();
String loopIP="127.0.0.1";
boolean b1=sIP.equals(localIP);
boolean b2=sIP.equals(loopIP);
if((!b1)&&(!b2)){
lst.add(sInfo,0);
pprint(sInfo);
System.out.println(dp.getAddress().getHostName());
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}).start();
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
lb1.setText(dTime());
//t.setTitle(new Date().toString());
}
};
new javax.swing.Timer(delay, taskPerformer).start();
}
String dTime(){
Date today=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("hh:mm:ss");
String time=sdf.format(today);
return time;
}
boolean ipTest(String ip){
boolean bln=ip.matches("[0-9]{1,3}//.[0-9]{1,3}//.[0-9]{1,3}//.[0-9]{1,3}");
if(bln){
lb2.setText("沙舟狼客工作室");
System.out.println("right");
return bln;
}else{
lb2.setText("IP地址格工不正确!");
tfIP.setText(" ");
System.out.println("wrong");
return bln;
}
}
void pprint(String str){
try{
File f=new File("d:/聊天信息.txt");
FileOutputStream fos=new FileOutputStream(f,true);
PrintWriter pw=new PrintWriter(fos);
pw.println(str);
fos.flush();
pw.flush();
fos.close();
pw.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String args[]){
new Test();
}
}
基于UDP协议的Java聊天小程序!
最新推荐文章于 2022-07-16 18:07:27 发布