局域网之间的小QQ聊天小程序

package QQ;


import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Random;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;


import com.sun.org.omg.CORBA.Initializer;


public class QQa {

private JFrame frame;
private JTextField ipField;
private JTextField portField;
private JTextField myPortField;
private JTextField sendMsgField;
private JTextArea msgArea;
private DatagramSocket datagramSocket;


public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run() {
QQa window = new QQa();
window.frame.setVisible(true);
}
});
}

public QQa(){
   initialize();
}

private void initialize(){
frame=new JFrame();
frame.setBounds(150, 150, 800, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);

JLabel ipLable=new JLabel("");
ipLable.setBounds(33, 10, 54, 15);
frame.getContentPane().add(ipLable);

ipField=new JTextField();
ipLable.setLabelFor(ipField);
ipField.setBounds(97, 7, 125, 21);
frame.getContentPane().add(ipField);
ipField.setColumns(10);

JLabel myportLable=new JLabel("");
myportLable.setBounds(417, 10, 104, 15);
frame.getContentPane().add(myportLable);

JLabel label = new JLabel("");
label.setBounds(244, 10, 82, 15);
frame.getContentPane().add(label);

portField = new JTextField();
label.setLabelFor(portField);
portField.setBounds(323, 7, 66, 21);
frame.getContentPane().add(portField);
portField.setColumns(10);

myPortField=new JTextField();
myPortField.setEditable(false);
myPortField.setBounds(531, 7, 66, 21);
frame.getContentPane().add(myPortField);
myPortField.setColumns(10);

JScrollPane scrollPane=new JScrollPane();
scrollPane.setBounds(33, 43, 645, 314);
frame.getContentPane().add(scrollPane);

msgArea=new JTextArea();
msgArea.setEditable(false);
scrollPane.setViewportView(msgArea);
msgArea.setRows(8);

JLabel sendMsgLabel=new JLabel("");
sendMsgLabel.setBounds(33, 367, 82, 15);
frame.getContentPane().add(sendMsgLabel);

sendMsgField=new JTextField();
sendMsgField.setBounds(107, 364, 510, 21);
frame.getContentPane().add(sendMsgField);
sendMsgField.setColumns(10);

JButton sendMsgBtn=new JButton("发送");

sendMsgBtn.addActionListener(new ActionListener(){


public void actionPerformed(ActionEvent e) {
String msg=sendMsgField.getText();
if(msg!=null && !msg.equals("")){
msgArea.append("我说:"+msg+"\n");
sendMsgField.setText(null);
try {
byte[] bytes=msg.getBytes("utf-8");

String ip=ipField.getText();
int port=Integer.parseInt(portField.getText());

DatagramPacket packet=new DatagramPacket(bytes,0,bytes.length,new InetSocketAddress(ip,port));
datagramSocket.send(packet);


} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();
} catch (IOException eee) {

eee.printStackTrace();


}

}


});
sendMsgBtn.setBounds(632, 363, 66, 23);
frame.getContentPane().add(sendMsgBtn);

int myport=new Random().nextInt(1000)+8000;
try {
this.datagramSocket=new DatagramSocket(myport);
} catch (SocketException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
this.myPortField.setText(""+myport);
Thread recieveMsg=new Thread(){
public void run() {
byte[] bytes=new byte[1024];
do{
DatagramPacket packet=new DatagramPacket(bytes,0,bytes.length);
try {
datagramSocket.receive(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


String msg;
try {
msg = new String(bytes,0,packet.getLength(),"utf-8");
msgArea.append(packet.getAddress().getHostAddress()+"说:"+msg+"\n");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}while(true);



}
};
recieveMsg.start();

}




}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值