想写一个简单的聊天程序,于是写了一个服务器程序,和两个客户端程序,两个客户端程序代码差不多,就是相互的连接端口号不同,客户端程序打开时先向服务器端通报自己的IP地址,之后两个客户端聊天时,先向服务器取得对方的IP地址,之后再向对方发送数据,我的客户端程序中,都开了个线程,在这个线程中也写ServerSocket的代码,用来接收消息,但是测试时,在两台电脑上,分别运行两个客户端程序,只有一方能发送成功,另一方发送时总是失败,提示java.net.ConnectException: Connection timed out: connect,把Socket关闭了也没用啊,求解,以下是代码,Test作获取客户端的IP地址的服务器,Client和Client1分别是客户端。客户端程序运行到点击发送按钮的事件处理的代码时,提示异常的那个就无法运行新建Socket的代码import java.net.*;
import java.io.*;public class Test
{
public static void main(String argv[])
{
int port=7;
String userip[]=new String[2]; try
{
ServerSocket srv=new ServerSocket(port);
System.err.println("Echo server start at port:"+port); while(true)
{
Socket clnt=srv.accept();
DataInputStream dataIn=new DataInputStream(new BufferedInputStream(clnt.getInputStream()));
DataOutputStream dataOut=new DataOutputStream(new BufferedOutputStream(clnt.getOutputStream()));

String cc=String.valueOf(clnt.getInetAddress()); String ip=cc.substring(1,cc.length());

String req=dataIn.readUTF();
System.out.println(req); if(req.equals("Client"))
{
userip[0]=ip;
System.out.println("Client初始化成功!");
}
else if(req.equals("Client1"))
{
userip[1]=ip;
System.out.println("Client1初始化成功!");
}
else if(req.equals("needClient1"))
{
dataOut.writeUTF(userip[1]);
dataOut.flush();
System.out.println(userip[1]);
}
else if(req.equals("needClient"))
{
dataOut.writeUTF(userip[0]);
dataOut.flush();
System.out.println(userip[0]);
} dataIn.close();
dataOut.close();
}
}
catch(IOException ioe)
{
System.err.println(ioe);
}
}
}import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;public class Client implements Runnable
{
private Socket sock;
private DataInputStream dataIn;
private DataOutputStream dataOut; Label la,la1;
TextField tf,tf1;
Button bu;
String ip; public static void main(String argv[])
{
new Client();
} public Client()
{
Frame f=new Frame("Client");
la=new Label("请输入要发送的字符串:");
tf=new TextField();
la1=new Label("接收到的信息");
tf1=new TextField();
tf1.setEditable(false);
Panel pa=new Panel(new GridLayout(2,2));
pa.add(la);
pa.add(tf);
pa.add(la1);
pa.add(tf1); makeConnection();
try
{
dataOut.writeUTF("Client");
dataOut.flush();
}
catch(IOException io)
{
System.err.println("Error"+io);
}

bu=new Button("发送");
bu.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
makeConnection(); try
{
dataOut.writeUTF("needClient1");
dataOut.flush();
ip=dataIn.readUTF();
System.out.println("1");
InetAddress srvAddr=InetAddress.getByName(ip);
System.out.println("2");
Socket so=new Socket(srvAddr,1);
System.out.println("3");
dataOut=new DataOutputStream(new BufferedOutputStream(so.getOutputStream()));
send();
so.close();
}
catch(IOException io)
{
System.err.println("Error"+io);
}

}); f.add(pa,BorderLayout.NORTH);
f.add(bu,BorderLayout.CENTER); f.pack();
f.setVisible(true); Thread th=new Thread(this);
th.start();
} private void makeConnection()
{
try
{
InetAddress srvAddr=InetAddress.getByName("221.205.48.54");
 
sock=new Socket(srvAddr,7);
dataOut=new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));
dataIn=new DataInputStream(new BufferedInputStream(sock.getInputStream()));
System.out.println("Connection to server ok");
}
catch(IOException io)
{
System.err.println("Error:"+io);
}
} private void send()
{
try
{
dataOut.writeUTF(tf.getText());
dataOut.flush();
}
catch(IOException IOE)
{
System.out.println(IOE);
}
} public void run()
{
int port=3800; try
{
ServerSocket srv=new ServerSocket(port);
System.err.println("Echo server start at port:"+port); while(true)
{
Socket clnt=srv.accept();
DataInputStream dataIn=new DataInputStream(new BufferedInputStream(clnt.getInputStream()));

System.out.println("Clinet connected from:"+clnt.getInetAddress());
String req=dataIn.readUTF(); tf1.setText(req);
dataIn.close();
clnt.close();
}
}
catch(IOException ioe)
{
System.err.println(ioe);
}
}
}
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;public class Client1 implements Runnable
{
private Socket sock;
private DataInputStream dataIn;
private DataOutputStream dataOut; Label la,la1;
TextField tf,tf1;
Button bu;
String ip; public static void main(String argv[])
{
new Client1();
} public Client1()
{
Frame f=new Frame("Client1");
la=new Label("请输入要发送的字符串:");
tf=new TextField();
la1=new Label("接收到的信息");
tf1=new TextField();
tf1.setEditable(false);
Panel pa=new Panel(new GridLayout(2,2));
pa.add(la);
pa.add(tf);
pa.add(la1);
pa.add(tf1); makeConnection();
try
{
dataOut.writeUTF("Client1");
dataOut.flush();
}
catch(IOException io)
{
System.err.println("Error"+io);
} bu=new Button("发送");
bu.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
makeConnection();
try
{
dataOut.writeUTF("needClient");
dataOut.flush();
ip=dataIn.readUTF();
System.out.println("4");
InetAddress srvAddr=InetAddress.getByName(ip);
System.out.println("5");
Socket so=new Socket(srvAddr,3800);
System.out.println("6");
dataOut=new DataOutputStream(new BufferedOutputStream(so.getOutputStream()));
send();
so.close();
}
catch(IOException io)
{
System.err.println("Error"+io);
}

}); f.add(pa,BorderLayout.NORTH);
f.add(bu,BorderLayout.CENTER); f.pack();
f.setVisible(true); Thread th=new Thread(this);
th.start();
} private void makeConnection()
{
try
{
InetAddress srvAddr=InetAddress.getByName("221.205.48.54");
 
sock=new Socket(srvAddr,7);
dataOut=new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));
dataIn=new DataInputStream(new BufferedInputStream(sock.getInputStream()));
System.out.println("Connection to server ok");
}
catch(IOException io)
{
System.err.println("Error:"+io);
}
} private void send()
{
try
{
dataOut.writeUTF(tf.getText());
dataOut.flush();
}
catch(IOException IOE)
{
System.out.println(IOE);
}
} public void run()
{
int port=1; try
{
ServerSocket srv=new ServerSocket(port);
System.err.println("Echo server start at port:"+port); while(true)
{
Socket clnt=srv.accept();
DataInputStream dataIn=new DataInputStream(new BufferedInputStream(clnt.getInputStream()));

System.out.println("Clinet connected from:"+clnt.getInetAddress());
String req=dataIn.readUTF(); tf1.setText(req);
dataIn.close();
clnt.close();
}
}
catch(IOException ioe)
{
System.err.println(ioe);
}
}
}