急~~~~~F关于Java网络编程中多客户端对服务端的无法访问?
//Server.java
//////////////////////////////////////
package javanet;
import java.net.*;
import java.io.*;
public class Server {
// create a server
private ServerSocket server;
private int clientCount=0;
/** Creates a new instance of Server */
public Server() {
try {
while(true){
server=new ServerSocket(8086);
System.out.println( "正在等待客户的连接: ");
Socket connectToClient=server.accept();
clientCount++;
System.out.println( "客户 "+clientCount+ "已经连接上,服务器应答就绪: ");
HandleAClient thread=new HandleAClient(connectToClient);
thread.start();
}
}
catch(BindException e){
System.out.println( "端口被占用 ");
}
catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Server server=new Server();
}
}
///////////////////////////////////////////////////
//Client.java
package javanet;
import java.net.*;
import java.io.*;
public class Client {
private Socket contentToServer;
/** Creates a new instance of Client */
public Client() {
try {
System.out.println( "请求服务器: ");
contentToServer=new Socket( "localhost ",8086);
System.out.println( "请求成功,正成发送数据: ");
DataInputStream disFormServer=new DataInputStream(contentToServer.getInputStream());
DataOutputStream dosToServer=new DataOutputStream(contentToServer.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
double r=0;
while(r> =0){
r=Double.parseDouble(br.readLine());
dosToServer.writeDouble(r);
double area=disFormServer.readDouble();
System.out.println( "From Server is "+area);
}
} catch (UnknownHostException ex) {
ex.printStackTrace();
}
catch(ConnectException e){
System.out.println( "连接超时,找不到服务器。 ");
}
catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
Client client=new Client();
}
}
/////////////////////////////////////////////////////////
//HandleAClient.java
package javanet;
import java.io.*;
import java.net.*;
class HandleAClient extends Thread{
private Socket connectToClient;
public HandleAClient(Socket socket){
connectToClient=socket;
}
public void run(){
try{
DataInputStream disFormClient=new DataInputStream(connectToClient.getInputStream());
DataOutputStream dosToClient=new DataOutputStream(connectToClient.getOutputStream());
InetAddress clientInetAddress=connectToClient.getInetAddress();
double r=0;
while(r> =0){
System.out.println( "连接的客户机是: "+clientInetAddress.getHostName());
r=disFormClient.readDouble();
double area=Math.PI*r*r;
dosToClient.writeDouble(area);
Thread.sleep(100);
}
}
catch(IOException e){
System.err.println(e);
}
catch(InterruptedException e){
System.err.println(e);
}
}
}
运行之后,服务端总是端口被占,但能运行第一个客户,以后的就没什么反应了。
高手们给个答案。急~~~~~~
[解决办法]
server=new ServerSocket(8086); 写在while(true)里面 不报错才怪!
而且while(true)还是写在构造函数里,算你狠~