首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

本人写的仿QQ的一段代码就是联不了网!解决办法

2012-01-11 
本人写的仿QQ的一段代码就是联不了网!以下是本人写的仿QQ的一段代码,可以运行成功但就是联不了网!这是为什

本人写的仿QQ的一段代码就是联不了网!
以下是本人写的仿QQ的一段代码,可以运行成功但就是联不了网!这是为什么?
不好意思代码比较杂乱,又不喜欢注释,希望大哥大姐们耐心看看啊!
代码的大致意思是在登陆对话框输入对方IP地址和自己的姓名,就可以和对方进行聊天了!
当然对方也是同样登陆,填上我的IP地址.

Java code
import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.net.*;//import java.io.*;public class LanSQQ {    public static void main(String[] args)    {                //InetAddress server=InetAddress.getByName();        QQDL qqdl=new QQDL();        qqdl.setTitle("乞丐QQ");        qqdl.setSize(200,150);        qqdl.setLocation(600,400);        qqdl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        qqdl.setVisible(true);        //if(qqdl.txtLZ.getText().equals("y")) {            //qqdl.setVisible(false);            //QQPanel QQ = new QQPanel(/*qqdl.txtXM.getText(), qqdl.LabIp.getText()*/);            //QQ.setTitle("乞丐QQ");            //QQ.setSize(400, 500);            //QQ.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            //QQ.setVisible(true);        }}class QQDL extends JFrame implements ActionListener {    /**     *      */    private static final long serialVersionUID = 6903763380037544539L;    private JLabel LabXX =new JLabel("请输入您的信息");    private JLabel LabXM =new JLabel("姓  名");    JTextField txtXM =new JTextField();    JLabel LabIp =new JLabel("IP地址");    private JTextField txtIp=new JTextField();    private JButton bntDL =new JButton("登陆");    public QQDL()    {        //ActionListener al=new LAFActionlistener();        //bntDL.addActionListener(al);        bntDL.addActionListener(this);        JPanel pa=new JPanel();        pa.add(LabXX);        getContentPane().add(pa,BorderLayout.NORTH);        JPanel pb=new JPanel();        pb.setLayout(new GridLayout(2,2));        pb.add(LabXM);        pb.add(txtXM);        pb.add(LabIp);        pb.add(txtIp);        getContentPane().add(pb,BorderLayout.CENTER);        JPanel pc=new JPanel();        pc.add(new JLabel());        pc.add(bntDL);        getContentPane().add(pc,BorderLayout.SOUTH);    }                 public void actionPerformed(ActionEvent e)        {           Object shi=e.getSource();        QQPanel QQ=new QQPanel(txtXM.getText(),txtIp.getText());        QQ.setTitle("乞丐QQ");        QQ.setSize(400,500);        QQ.setLocation(550,200);        QQ.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        QQ.setVisible(true);        if(shi==bntDL){this.setVisible(false);}        }}class QQSender extends Thread{     private InetAddress server;     private int port;     private DatagramSocket dsocket;     private JTextArea txtFS;     public QQSender(InetAddress server,int port,DatagramSocket dsocket,JTextArea txtFS)     {         this.server=server;         this.port=port;         this.dsocket=dsocket;         this.txtFS=txtFS;     }     public void run()     {        try         {            while (true)             {                byte[] data = (txtFS.getText()).getBytes();                DatagramPacket outgoing = new DatagramPacket(data, data.length,                        server, port);                dsocket.send(outgoing);            }        } catch (Exception e)         {        }          }}class QQReceiver extends Thread{     //private InetAddress server;     //private int port;     private DatagramSocket dsocket;     private JTextArea txtLiao;     public QQReceiver(InetAddress server,int port,DatagramSocket dsocket,JTextArea txtLiao)     {         //this.server=server;         //this.port=port;         this.dsocket=dsocket;         this.txtLiao=txtLiao;         setName("LanSQQ-Receiver");     }     public void run()     {         byte[] buffer=new byte[10000];         try         {             while(true)             {                 DatagramPacket incom=new DatagramPacket(buffer,buffer.length);                 dsocket.receive(incom);                 String data=new String(incom.getData(),0,incom.getLength());                 txtLiao.append(data);             }         }catch(Exception e)         {              }finally         {                      }      }}class QQPanel extends JFrame{    /**     *      */    private static final long serialVersionUID = -7871881624202450654L;    private DatagramSocket dsocket;    private JLabel LiaoLabel =new    JLabel("聊天记录");    private JTextArea txtLiao =new JTextArea();    private JTextArea txtFS =new JTextArea();    private JButton bntFS =new    JButton("发送");    private String yh;    private String ip;    public QQPanel(String yh,String ip)    {                 this.yh=yh;         this.ip=ip;                  ActionListener al=new LAFActionlistener();         bntFS.addActionListener(al);                  JPanel p1=new JPanel();            p1.setLayout(new GridLayout(1,3));         p1.add(LiaoLabel);         p1.add(new JLabel());         p1.add(new JLabel());         getContentPane().add(p1,BorderLayout.NORTH);                  JPanel p2=new JPanel();         txtLiao.setBackground(Color.LIGHT_GRAY);         txtLiao.setLineWrap(true);         txtLiao.setEditable(false);         txtFS.setLineWrap(true);         txtFS.setBackground(Color.LIGHT_GRAY);         JScrollPane s1=new JScrollPane(txtLiao);         JScrollPane s2=new JScrollPane(txtFS);         //s1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);         //s2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);         p2.setLayout(new GridLayout(2,1,5,5));         p2.add(s1);         p2.add(s2);         getContentPane().add(p2,BorderLayout.CENTER);                  JPanel p3=new JPanel();         p3.setLayout(new GridLayout(1,3));         p3.add(new JLabel());         p3.add(new JLabel());;         p3.add(bntFS);         getContentPane().add(p3,BorderLayout.SOUTH);        try {            dsocket=new DatagramSocket(8000);             new QQSender(InetAddress.getByName(this.ip), 8080, dsocket, txtFS).start();            System.out.println("ok!");        } catch (Exception e) {                    }                       }     class LAFActionlistener implements ActionListener     {                      public void actionPerformed(ActionEvent e)         {             String ss=txtFS.getText();             String sss=yh+":"+"\n"+ss+"\n";             txtFS.setText("");             //txtLiao.append(yh);             txtLiao.append(sss);            try {                new QQSender(InetAddress.getByName(ip), 8080, dsocket, txtFS).start();                System.out.println("yes!");            } catch (Exception a) {                // TODO: handle exception            }                      }     }} 



[解决办法]
先不看源码,你要确定你在局域网里面才行,否则要做端口映射,或者搭建vnn
[解决办法]
你没有启动接收线程,你启动的是两个发送线程。
[解决办法]
如果是在局域网内,应该是可以的。

但是,你的代码有一点问题。

1、在发送线程中
while (true) 
{
byte[] data = (txtFS.getText()).getBytes();
DatagramPacket outgoing = new DatagramPacket(data, data.length,
server, port);
dsocket.send(outgoing);
}
txtFS.getText()的值为“”,所以发送的结果你看不到。

2、你的发送线程无法退出,当发送完当前的数据之后,应该退出该线程。当下次发送之后再启动。

热点排行