写了个聊天程序,运行后客户端说的话服务器段看不到,服务器说的话客户端也看不到,怎么回事?
代码如下,请各位大虾指导
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.   

    System.out.println(ip+"说:"+fromClient);
    System.out.println("Server说:"+fromServer); 
    这两句不行么?
    我开始写了个一对一的,就是这样写的能出来啊
    楼上大哥继续指点
      

  2.   

    你那两个thread不能这么用。呵呵。OVER。
    不过可以告诉你一个思路。
    把socket传入这个thread,呵呵。而不是在thread里来获得socket.
    Over
    public ReceiveServerThread(Socket s){
    }
      

  3.   

    我是刚学java,费老劲才才写到这样子,居然还不行
    mofeir专家,你这样大体一说我也理解不了,可否说详细些,该怎么实现?
      

  4.   

    强,老大你能不能好好看看socket编程呀,这么危险的动作你也干。郁闷。从来没有见到过这么强大的通讯程序。不要介意呀,太惊讶了。我觉着,你先别用线程来实现一个最简单的通讯程序吧。然后,我建议你去看看多线程的应用。然后再看看socket套接字的应用(最主要是时间约束)。看看吧,兄弟,对你会有好处的,不要没有看明白就开始写代码。
      

  5.   

    郁闷,解决不了,谁那有关于这方面的文章吗?用socket和线程实现聊天程序
    谢谢各位了
      

  6.   

    你的服务端已经:
    serversocket=new ServerSocket(4000);
    s=serversocket.accept();
    可在子线程内,又
    serversocket=new ServerSocket(4000);
    s=serversocket.accept();
    端口已经被占用了,再一次new,肯定不行
    而且客户端的子线程里面,怎么又有serversocket=new ServerSocket(4000);