本人跟着老师写了一个模拟java聊天的程序,可是我写了在win7下运行不成功,报错信息如下:
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at com.briup.net.SocketChat.client(SocketChat.java:81)
at com.briup.net.SocketChat.main(SocketChat.java:28)
还请高手救救小弟啊,,老师也木有给我解决啊···求助啊···源码如下:(老师那里可以运行的)import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;public class SocketChat { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

if(args.length>0){
server();
}
else{
client();
}
}

//服务端程序
public static void server(){
System.out.println("==========server run window===========");
try {
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();

InputStream is = s.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);


OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);

//字符输入流的对象
InputStreamReader isr = new InputStreamReader(System.in);//可以将一个字节输入流转换为字符流
BufferedReader br = new BufferedReader(isr);

String info;
while(true){
info = dis.readUTF();
System.out.println("client say: "+info);

if(info.equals("bye")){
break;
}


info = br.readLine();
dos.writeUTF(info);
dos.flush();
if(info.equals("bye")){
break;
}
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

//客户端程序
public static void client(){
System.out.println("==========client run window===========");
try {
Socket s = new Socket("127.0.0.1",9999);

OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
DataOutputStream dos = new DataOutputStream(bos);

InputStream is = s.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
DataInputStream dis = new DataInputStream(bis);

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

String info;
while(true){
info = br.readLine();
dos.writeUTF(info);
dos.flush();
if(info.equals("bye")){
break;
}
info = dis.readUTF();
System.out.println("server say: " + info);
if(info.equals("bye")){
break;
}
}


} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
跪求各位高手路过指点。小弟感激不尽啊····

解决方案 »

  1.   

    Socket s = new Socket("127.0.0.1",9999);
    ping 下localhost看是否为127.0.0.1,或者看看又没有9999端口
      

  2.   

    通常来说你的机器本身就是127.0.0.1也是就localhost
    我认为你这是在同一台机器上测试
    可以自己找另一台机器测试
      

  3.   


    我用netstat -a有0.0.0.0:9999这个东西,可是木有127.0.0.1:9999
    然后在运行客户端就会报错··
      

  4.   

    有可能是ipv6的原因localhost的ip并不是127.0.0.1了
    你用Socket s = new Socket("localhost",9999);试试
      

  5.   

    你的main方法,有问题!
    public static void main(String[] args) {
    // TODO Auto-generated method stubif(args.length>0){
    server();
    }
    else{
    client();
    }
    }
    你这种,要么启动服务端,要么启动客户端。
    正确的做法,应该是需要用线程的哦。下面是我的源码,仅供参考。
    客户端代码实现类:ChatClient
    public class ChatClient { private JFrame jf = new JFrame("聊天室客户端");
    private JTextArea jt = new JTextArea();
    private DataOutputStream dos = null;
    private JTextField jtf = new JTextField(15);

    public static void main(String[] args) {
    ChatClient cc = new ChatClient();

    try {
    cc.createForm();
    cc.clientStart("127.0.0.1", 8888);
    } catch (Exception e) {
    e.printStackTrace();
    }
    } /**
     * 创建客户端用户的图形窗体
     * @author gsucbiao
     * @date 2011-6-14 && 下午09:52:24
     * @method createForm
     * @type void
     */
    public void createForm() {
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.getContentPane().add(jt, BorderLayout.CENTER);

    JButton jb = new JButton("发送");
    SendButtonAction sendAction = new SendButtonAction();
    jb.addActionListener(sendAction);
    JPanel jp = new JPanel();
    jp.add(jtf);
    jp.add(jb);

    jf.getContentPane().add(jp, BorderLayout.SOUTH);
    jf.setSize(300, 200);
    jf.setVisible(true);
    }

    public void clientStart(String ip, int port) throws Exception {
    Socket s = new Socket(ip, port);
    dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
    new ChatServerReadServer(s).start();
    }

    class SendButtonAction implements ActionListener { @Override
    public void actionPerformed(ActionEvent e) {
    String msg = jtf.getText();

    jtf.setText("");

    if("".equals(msg)) {
    JOptionPane.showMessageDialog(jf, "Content can not be empty!");
    return ;
    }

    try {
    dos.writeUTF(msg);
    dos.flush();
    } catch (Exception ex) {
    JOptionPane.showMessageDialog(jf, "Sending failed, please try again!");
    ex.printStackTrace();
    }
    }

    } class ChatServerReadServer extends Thread {
    private Socket s;

    public ChatServerReadServer(Socket s) {
    this.s = s;
    }

    public void run() {
    try {
    DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
    while(true) {
    String msg = jt.getText() + "\n\r" + dis.readUTF();
    jt.setText(msg);

    if("88".equals(msg)) {
    break;
    }
    }
    } catch (Exception e) {
    System.out.println("Have been out of chat rooms!");
    }
    }
    }
    }
    服务端代码实现类:ChatServer
    public class ChatServer {

    private Vector<Socket> vect = new Vector<Socket>(); public static void main(String[] args) {
    ChatServer server = new ChatServer();
    try {
    server.startServer(8888);
    } catch (Exception e) {
    System.out.println("server starting is failed!");
    e.printStackTrace();
    }
    } /**
     * 启动服务器,并循环监听接收客户端的链接
     * @author gsucbiao
     * @date 2011-6-14 && 下午10:02:32
     * @method startServer
     * @type void
     * @param port 端口号
     * @throws Exception
     */
    public void startServer(int port) throws Exception {
    ServerSocket ss = new ServerSocket(port);
    while(true) {
    Socket s = ss.accept();
    vect.add(s);
    new ChatSocketOpt(s).start();
    }
    }

    class ChatSocketOpt extends Thread {
    private Socket s;

    public ChatSocketOpt(Socket s) {
    this.s = s;
    }

    public void run() {
    try {
    DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
    while(true) {
    String msg = dis.readUTF();
    System.out.println("Server accept is " + msg);

    for(Socket tmp_s : vect) {
    if(tmp_s != s) {
    DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(tmp_s.getOutputStream()));
    dos.writeUTF(msg);
    dos.flush();
    }
    }

    if("88".equals(msg)) {
    break;
    }
    }
    } catch (Exception e) {
    System.out.println("已退出聊天室");
    vect.remove(s);
    }
    }
    }
    }
      

  6.   


    试过了··错误还是一样的··
    ping localhost显示:正在 Ping PC [::1]具有32字节的数据还是不行啊···
      

  7.   


    试过了··错误还是一样的··
    ping localhost显示:正在 Ping PC [::1]具有32字节的数据还是不行啊···
      

  8.   


    是用线程,这个下一步就会这么写了··不过老师说需要调通这个才可以继续··
    mian方法这样写也是可以的,这个可以运行两次的··第一次给main方法个参数,
    运行服务端server,然后将参数取消在就可以运行客户端client了。
    然后这两个窗口就可以进行对话了··因为老师那里已经实验成功了。不过还是谢谢您的方法··调通这个我在试试哈···
      

  9.   

    你这是ipv6无疑的啦
    用这个试试
    Socket s = new Socket(InetAddress.getLocalHost(),9999)
      

  10.   

    127.0.0.1那个是你老师电脑的IP,你要改为你自己电脑的IP,自己查查你电脑的IP
      

  11.   

    运行完服务端server,在运行客户端client,,
    else{
    client();到这Socket s = new Socket("127.0.0.1",9999);
    好像就有问题了···拒绝访问了···
    一直木有办法解决啊···
      

  12.   

    多试试别的端口(1024以上的)查查你的9999端口有没有被占用:netstat -nao,记下pid去资源管理器找程序;
    看看你的端口是不是被防火墙屏掉了,一定是你电脑的问题了
      

  13.   


    嗯,,我也觉得是我电脑的问题,,运行后也ping 过,9999这个端口没有被占有,
    程序运行后ping显示0.0.0.0:9999;
    不过后面我就不知道怎么解决了··还请您教教小弟我呗···
    记下pid去资源管理器找程序;
    看看你的端口是不是被防火墙屏掉了,一定是你电脑的问题了

    这个地方是怎么做的呢??怎么去资源管理器找啊??怎么关掉防火墙啊??
    跪求指点····谢谢啊···过后一定给您加高分啊····
      

  14.   

    如果是TCP/IP  被禁用的话  
    在外围应用配置器里可以修改的。
    启用tcp/ip这个选项
      

  15.   

    测试下了 发现sql server  重启之后sql server 的监视器有可能会关掉.
    启用 tcp/ip 之后  查看下监视器又没有启用
    监视器启用之后,去测试会显示成功的。
      

  16.   

    你好,我最近遇到了和这个类似的问题。后来发现问题出在了这里:
    if(args.length>0)因为我没有设置控制台参数,args.length=0,所以不能正确运行。你用的是Jbuilder哪个版本?如果是2008的,在Run Dialog的这里设置(随便一个数,比零大就行)
      

  17.   

    你好。我最近遇到了一个类似的问题。最后发现问题出在了这里:
    if(args.length>0){我没有设置控制台参数,结果args.length=0了,而不是大于0。你也可以试试修改参数,应该能帮到你。Jbuilder2008的参数设置在Open Run Dialog——arguments——Program arguments里设置,我随便输入了一个数(比0大),解决了我的问题。