我在宿舍的两台电脑中分别运行写好的ServerSocket端和Socket端。但是运行是总是显示IP地址不对。
而我在自己电脑同时运行是可以通信的。 代码如下:
import java.io.IOException;
import java.net.*;
import java.io.*;
import java.util.*;public class ChatServer {
Socket s;
ServerSocket ss;
public static void main(String[] args) {
new ChatServer().start();

}
  
public void start(){
try {
ss=new ServerSocket(6666);
while(true){
s=ss.accept();
//System.out.println("connect complete!\n");
Client c=new Client(s);
new Thread(c).start();
}

} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("端口使用中...");
System.exit(-1);
}
    }
    
class Client  implements Runnable {
Socket s;
String str;
Client(Socket s){
this.s=s;
}
public void run() {
//InputStreamReader isr;
try {
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader bfr=new BufferedReader(isr);  
while(true){
str=bfr.readLine();
if (str==null) {
System.out.println(s.getInetAddress().getHostName()+"下线了!");
    bfr.close();
    isr.close();
    s.close();
break;
}
System.out.print(str+"\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

}}import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.io.*;
import java.net.*;public class ChatClient extends Frame{
    TextField tf;
    TextArea taSum;
    Socket s;
    OutputStream os;
    PrintStream ps;
    String name;
public static void main(String[] args) {
           ChatClient cc=new ChatClient();
 //          cc.launchFrame();
           cc.connect();
           cc.launchFrame();
           
}
public void launchFrame(){
setTitle("聊天室");
setBounds(new Rectangle(200,200,400,200));
setResizable(false);
setLayout(new BorderLayout());
tf=new TextField();
taSum=new TextArea("",8,50,TextArea.SCROLLBARS_VERTICAL_ONLY);
add(tf,BorderLayout.SOUTH);
add(taSum,BorderLayout.NORTH);
taSum.setEditable(false);
taSum.setBackground(Color.PINK);
tf.addActionListener(new tfMonitor()); this.addWindowListener(new WindowAdapter(){ @Override
public void windowClosing(WindowEvent arg0) {
try {
ps.close();
os.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setVisible(false);
System.exit(0);
}

});


    
pack();
setVisible(true);
}
class tfMonitor implements ActionListener { public void actionPerformed(ActionEvent e) {
ps.println(name+tf.getText());
taSum.append(name+tf.getText());
taSum.append("\n");
tf.setText("");

}

}
 
      public void connect(){
     try {
s=new Socket("SkySmile",6666);
System.out.println("服务器连接成功!\n");
os=s.getOutputStream();
ps=new PrintStream(os);
name=s.getLocalAddress().getHostName();
            ps.println(name+"上线了!");
   } catch (UnknownHostException e) {
   System.out.println("IP地址错误!");
   System.exit(-1);
} catch (IOException e) {
System.out.println("服务器连接失败!");
System.exit(-1);
}
    
    }
}  

解决方案 »

  1.   

    答:代码中:s=new Socket("SkySmile",6666); 
    中"SkySmile"是什么?此处你应写ChatServer这台机器的IP地址.(除非你做了"SkySmile"这个名字与IP地址的映射)
      

  2.   

    s=new Socket("SkySmile",6666); 1.不要使用机器名做连接,直接写ip地址;
    2.尽量使用9000以后的端口;
    3.服务器的多线程机制有问题,目前的代码只能有一个客户端连接;
      

  3.   

    问过好多次了,s=new Socket("SkySmile",6666); 
      

  4.   


    s=new Socket("SkySmile",6666); 
    我的计算机主机名就是SkySmile,而且就算改成了Ip地址。客户端也连不上服务器。3.服务器的多线程机制有问题,目前的代码只能有一个客户端连接;
    这个没问题。我的可以多个客户端向服务器发信息。这个服务器并不转发收到的信息。我发现我宿舍同一个交换机下的电脑互相Ping不通。。会不会是这个原因啊!!
      

  5.   

    s=new Socket("SkySmile",6666); 
    我的计算机主机名就是SkySmile,而且就算改成了Ip地址。客户端也连不上服务器。
    我发现我宿舍同一个交换机下的电脑互相Ping不通。。会不会是这个原因啊!!答:
    1)不是你的机器名,也不是你的IP,而是那个服务器的IP.
    2)互相Ping不通,有两处可能,一种是真正网络不通,另一种是网络通但设置成PING不响应.
    你还是先用1)试一试. 
      

  6.   


    3.ping不通话的,把你们2个机器都改成固定的ip。比如198.0.1.5和198.0.1.6
      我觉得原因就出在这里
      

  7.   


    哈哈。。问题解决了。。就是防火墙没关。。其他的一切正常。我又把服务器加上了转发功能真的很好用哦。。
    继续讨论。。我的飞鸽传书就能在Windows自带的防火墙开着的况下发信息啊。。
    有没有什么方法使我的这个小程序也能做到这样??????