写了个聊天程序,运行后客户端说的话服务器段看不到,服务器说的话客户端也看不到,怎么回事?
代码如下,请各位大虾指导
Server端代码:
import java.net.*;
import java.io.*;
public class Server 
{
public static void main(String[] args) throws IOException
{
ServerSocket serversocket=null;
Socket s=null;
String toClient;

boolean runable=true;


try{
System.out.println("等待客户端连接");
while(true)
{

serversocket=new ServerSocket(4000);
s=serversocket.accept();
DataOutputStream dataout=new DataOutputStream(s.getOutputStream());  
DataInputStream datain=new DataInputStream(s.getInputStream()); 
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String ip=""+s.getInetAddress();
System.out.println("IP:"+ip+"登陆");
       
ReceiveClientThread readClientThread=new ReceiveClientThread();
readClientThread.start();
while(runable){
toClient=in.readLine(); 
if(toClient.equals("quit")){ break;} 
dataout.writeUTF(toClient);
}
dataout.close();
datain.close();
in.close();
s.close();
serversocket.close();
}
}catch(IOException e){System.err.println("Failed to connect");}
}
}
class ReceiveClientThread extends Thread{ String fromClient;
boolean runable=true;
public ReceiveClientThread(){}
public void run()
{
while(runable){
try{
ServerSocket serversocket=new ServerSocket(4000);
Socket s=serversocket.accept();
DataInputStream datain=new DataInputStream(s.getInputStream());
fromClient=datain.readUTF(); 
String ip=""+s.getInetAddress(); 
System.out.println(ip+"说:"+fromClient);
if(fromClient.equals("quit"))
{
 System.out.println("Client exit");
 break;
}
}catch(Exception e){runable=false;}
}
}
}
Client端代码如下:
import java.io.*;
import java.net.*;
public class Client 
{
public static void main(String[] args) throws IOException
{
Socket s=null;

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
boolean runable=true;
String toServer; 
try{
s=new Socket("192.0.0.168",4000);  
System.out.println("you have connected the server");
}catch(IOException e){System.out.println("Can not find Server!");}

ReceiveServerThread readServerThread=new ReceiveServerThread();
readServerThread.start();
DataOutputStream dataout=new DataOutputStream(s.getOutputStream());  
DataInputStream datain=new DataInputStream(s.getInputStream());
while(runable)
{
toServer=in.readLine(); 
if(toServer.equals("quit")) { break; } 
dataout.writeUTF(toServer);
}

dataout.close();
datain.close();
in.close();
s.close();
}
}
class ReceiveServerThread extends Thread
{
String fromServer="";
boolean runable=true;
public ReceiveServerThread(){}
public void run()
{
while(runable)
{
try
{
ServerSocket serversocket=new ServerSocket(4000);
Socket s=serversocket.accept();
DataInputStream datain=new DataInputStream(s.getInputStream());
fromServer=datain.readUTF();
System.out.println("Server说:"+fromServer); 
if(fromServer.equals("quit"))
{
System.out.println("Server exit");
break;
}
}catch(Exception e){runable=false;}
}
}
}

解决方案 »

  1.   

    你的SERVERSOCKET和CLINETSOCKET启动了吗?
    IO控制是否正确.
      

  2.   

    在程序头import 时最好指明要引用的位置如:import java.net .socket.*;
      

  3.   

    谢谢这位大哥,SERVERSOCKET和CLINETSOCKET需要怎样启动?定义一下不就行了?
      

  4.   

    这程序能运行起来才怪呢。
    服务端已经:
    serversocket=new ServerSocket(4000);
    s=serversocket.accept();
    然后创建了子线程类:
    ReceiveClientThread readClientThread=new ReceiveClientThread();
    在子线程内,又
    serversocket=new ServerSocket(4000);
    s=serversocket.accept();
    端口已经被占用了,再一次new,肯定会跳到catch()
    而客户端的子线程里面,居然又再一次serversocket=new ServerSocket(4000);
    如果你是在一台机器上测试,不知道这个4000端口要用多少次呀。
      

  5.   

    你可以把socket传入这个thread,而不是在thread里来获得socket.public ReceiveServerThread(Socket s){}