import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TextArea;
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 java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
public class UDPChat extends JFrame implements ActionListener{
public TextArea textmessage = null;
public TextArea sendtext = null;
public DatagramSocket socket;
public JScrollBar vsBar;
public UDPChat()
{
super();
setTitle("小型聊天程序");
setBounds(200,150,350,280);
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(Color.BLACK);
textmessage = new TextArea();
sendtext = new TextArea();
textmessage.setEditable(false);
textmessage.setColumns(35);
textmessage.setRows(10);
// textmessage.setLineWrap(true);
sendtext.setColumns(35);
sendtext.setRows(2);
JButton buttonOK = new JButton("确定");
JButton buttonclean = new JButton("清空");
JButton buttonquit = new JButton("退出");
GridLayout grid = new GridLayout(3,1);
grid.setHgap(10);
grid.setVgap(10);
panel1.setLayout(grid);
// panel1.setLayout(new GridLayout(3,1));
panel1.add(buttonOK);
panel1.add(buttonclean);
panel1.add(buttonquit);
panel2.setLayout(new FlowLayout());
panel2.add(textmessage);
panel2.add(sendtext);
getContentPane().add(panel1,BorderLayout.EAST);
getContentPane().add(panel2,BorderLayout.CENTER);
setVisible(true);
buttonOK.addActionListener(this);
buttonclean.addActionListener(this);
buttonquit.addActionListener(this);
server();
}
public void server()
{
try{
socket = new DatagramSocket(9527);
byte[] buf = new byte[1024];
final DatagramPacket dp1 = new DatagramPacket(buf,buf.length);
Runnable run = new Runnable(){
public void run()
{
while(true)
{
try{
Thread.sleep(100);
socket.receive(dp1);
int len = dp1.getLength();
String message = new String(dp1.getData(),0,len);
String ip = dp1.getAddress().getHostAddress();
System.out.println(ip);
if(!InetAddress.getLocalHost().getHostAddress().equals(ip))
textmessage.append(ip+"\n"+message+'\n');
}catch(IOException e)
{
e.printStackTrace();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
};
new Thread(run).start();
}catch(SocketException e)
{
e.printStackTrace();
}
}
public static void main(String[] args) {
UDPChat udp = new UDPChat();
}
@Override
public void actionPerformed(ActionEvent e) {
// JButton button = (JButton) e.getSource();
String buttonname =e.getActionCommand();
if(buttonname.equals("退出"))
System.exit(0);
if(buttonname.equals("清空"))
{
textmessage.setText("");
}
if(buttonname.equals("确定"))
{
String iP = "192.168.8.15";
try {
InetAddress address =InetAddress.getByName(iP);
byte []data = sendtext.getText().getBytes();
DatagramPacket dp = new DatagramPacket(data,data.length,address,9527);
String myip = InetAddress.getLocalHost().getHostAddress();
textmessage.append(myip +" \n"+sendtext.getText() +"\n");
socket.send(dp);
sendtext.setText("");
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
java小型聊天室源代码
最新推荐文章于 2025-05-24 11:34:46 发布