当前位置: 代码迷 >> Java相关 >> 很简单的聊天窗口,不能建立连接。郁闷啦
  详细解决方案

很简单的聊天窗口,不能建立连接。郁闷啦

热度:209   发布时间:2011-08-11 16:57:05.0
很简单的聊天窗口,不能建立连接。郁闷啦
源程序是这样的:
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.*;
public class ChatClient extends JFrame implements ActionListener {

    private JButton jbtSend,jbtExit;
    private JTextField jtfTxt1;
    private JTextArea jtaArea;
    private JLabel jlfLabel;
    private JPanel p1,p2;
    public ChatClient()
    {
        super("Chat Client");
        p1 = new JPanel();
        p2 = new JPanel();
        jtaArea = new JTextArea(8,37);
        JScrollPane pane = new JScrollPane(jtaArea);
        jtaArea.setEditable(false);
        
        jtfTxt1 = new JTextField(20);
        jbtSend = new JButton("发送");
        jbtExit = new JButton("退出");
        
        jlfLabel = new JLabel("请输入:");
        
        p1.add(jtaArea);
        p2.add(jlfLabel);
        p2.add(jtfTxt1);
        p2.add(jbtSend);
        p2.add(jbtExit);
        setLayout(new FlowLayout());

        add(p1,BorderLayout.NORTH);
        add(p2,BorderLayout.SOUTH);;
        
        jtfTxt1.addActionListener(this);
        jbtSend.addActionListener(this);
        jbtExit.addActionListener(this);
        setVisible(true);
        setSize(420, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
    public void actionPerformed(ActionEvent e)
    {
        String command = e.getActionCommand();
        if(command.equals("发送"))
        {
            try
            {
                Socket socket = new Socket("localhost",4700);
                BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintWriter os = new PrintWriter(socket.getOutputStream());
        
                Scanner sc = new Scanner(System.in);
                jtaArea.setText("客户:");
                String line = sc.nextLine();
                while(!line.equals("bye"))
                {
                    os.println(line);
                    os.flush();
                    jtaArea.setText("服务器:"+is.readLine()+"\n");
                    jtaArea.setText("客户:");
                    line = sc.nextLine();
                }
                sc.close();
                os.close();
                is.close();
                socket.close();
        
            }
            catch (IOException ex)
            {
            System.out.println("ERROR:"+ex);
            }
        }
        else if(command.equals("退出"))
            System.exit(0);
    }
    public static void main(String[] args){
        ChatClient client = new ChatClient();
    }

}

如图示:
可惜  我运行之后提示 ERROR:java.net.ConnectException: Connection refused: connect
因为是自觉,所以不知道错误怎么解决。在线等
搜索更多相关的解决方案: 聊天  private  public  import  

----------------解决方案--------------------------------------------------------
服务端程序呢?
  服务端程序也贴出来看看,这应该是有异常,直接显示异常信息了
----------------解决方案--------------------------------------------------------
恩,这是服务器端的:
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import javax.swing.*;

public class ChatServer extends JFrame implements ActionListener {

    private JButton jbtSend,jbtExit;
    private JTextField jtfTxt1;
    private JTextArea jtaArea;
    private JLabel jlfLabel;
    private JPanel p1,p2;
    public ChatServer()
    {
        super("Chat Server");
        p1 = new JPanel();
        p2 = new JPanel();
        jtaArea = new JTextArea(8,37);
        JScrollPane pane = new JScrollPane(jtaArea);
        jtaArea.setEditable(false);
        
        jtfTxt1 = new JTextField(20);
        jbtSend = new JButton("发送");
        jbtExit = new JButton("退出");
        
        jlfLabel = new JLabel("请输入:");
        
        p1.add(jtaArea);
        p2.add(jlfLabel);
        p2.add(jtfTxt1);
        p2.add(jbtSend);
        p2.add(jbtExit);
        setLayout(new FlowLayout());

        add(p1,BorderLayout.NORTH);
        add(p2,BorderLayout.SOUTH);;
        
        jtfTxt1.addActionListener(this);
        jbtSend.addActionListener(this);
        jbtExit.addActionListener(this);
        setVisible(true);
        setSize(420, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
    public void actionPerformed(ActionEvent e)
    {
        String command = e.getActionCommand();
        if(command.equals("发送"))
        {
            try
            {
                ServerSocket serversocket = new ServerSocket(4700);
                Socket socket = serversocket.accept();
                BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintWriter os = new PrintWriter(socket.getOutputStream());
        
                Scanner sc = new Scanner(System.in);
                jtaArea.setText("客户:"+is.readLine()+"\n");
                jtaArea.setText("服务器:");
                String line = sc.nextLine();
                while(!line.equals("bye"))
                {
                    os.println(line);
                    os.flush();
                    jtaArea.setText("客户:"+is.readLine()+"\n");
                    jtaArea.setText("服务器:");
                    line = sc.nextLine();
                }
                sc.close();
                os.close();
                is.close();
                socket.close();
                serversocket.close();
            }
            catch (IOException ex)
            {
            System.out.println("ERROR:"+ex);
            }
        }
        else if(command.equals("退出"))
            System.exit(0);
    }
    public static void main(String[] args){
        ChatServer client = new ChatServer();
    }

}

----------------解决方案--------------------------------------------------------
暂时还没有仔细看,但是你这个不能连接滴问题大概就出现在服务器端上面,
你服务端程序滴意思是要先点击“发送”才开始监听端口,这样就导致了你不能连接上服务器吧
----------------解决方案--------------------------------------------------------
那到底怎么解决啊,大家帮忙看看啦
----------------解决方案--------------------------------------------------------
把连接的代码提到外面去,不然你点一次发送。就要重新连接一次。。端口会被 占用的。。。
最后用上线程。。不然你要自己发一条消息出去的时候才能收到对方发来的消息
----------------解决方案--------------------------------------------------------
错误是说,服务器拒绝连接,你写的服务器代码是点击发送的时候,才连接,如果你没有点击服务器界面的发送,先点击客服端的发送,那么就没有连接上服务器了,你应该在服务器启动的时候就开始建立连接(而不是点击服务器的发送按钮才允许客服端连接),等待客服端的连接请求,那么就连的上服务器了。写代码的时候,先把连接弄好了,再增加别的功能,这样的编程习惯对以后很有好处!
----------------解决方案--------------------------------------------------------
你解决了问题了吗?哈哈……
----------------解决方案--------------------------------------------------------
  相关解决方案