代码在下面,碰到的问题是开1个SERVER端,2个CLIENT端时,SERVER端接收键盘输入的数据后发送给2个CLIENT端时,第一次输入的数据,不发送,第2次接收到数据后,发送了前一次的数据,出现了延迟的现象,同样的问题,如果开1个SERVER端 3个CLIENT端时, 前两次键盘输入数据后,CLIENT端接收不到,第3次后才接受到,请问问题出在哪里;一个4个类;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;public class Server
{
static ArrayList list = new ArrayList();
public static void startServer()
{
ServerSocket serverSocket = null;
Socket socket = null;
DataOutputStream dataOut = null;
System.out.println("Server start...");
System.out.println("waiting for clients connection:");
try
{
serverSocket = new ServerSocket(6000);
while(true)
{
socket = serverSocket.accept();
dataOut = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
list.add(dataOut);
SendData send = new SendData(list);
send.start(); 
}

}
catch(Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
startServer(); }}import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.net.Socket;public class Client
{
public static void startClient()
{
Socket socket = null;
DataInputStream dataIn = null;

System.out.println("client starts...");

try
{
socket = new Socket("localhost", 6000);
dataIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
System.out.println("connected successfully");
System.out.println("you can exit by type 'quit'");

}
catch(Exception e)
{
e.printStackTrace();
}

Get get = new Get(dataIn);
get.start();
}

public static void main(String[] args)
{
startClient(); }}import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;public class SendData extends Thread
{
static ArrayList list = null;
DataOutputStream dataOut = null;

public SendData(ArrayList list)
{
this.list = list;
}
public void run()
{
while(true)
{
try
{
String msg = "";
msg = new BufferedReader(new InputStreamReader(System.in)).readLine();
boardcast(msg); }
catch (IOException e)
{
e.printStackTrace();
}
}
}

public void boardcast(String s)
{
synchronized(list)
{
Iterator it = list.iterator();
while(it.hasNext())
{
dataOut = (DataOutputStream)it.next();

try
{
dataOut.writeUTF(s);
dataOut.flush();
System.out.println("已经成功发送数据");
}
catch (IOException e1)
{
// TODO 自动生成 catch 块
e1.printStackTrace();
}

}

}
}

}import java.io.DataInputStream;
import java.io.IOException;
public class Get extends Thread
{

DataInputStream dataIn = null;

public Get(DataInputStream dataIn)
{
this.dataIn = dataIn;
}

public  void run()
{
String msg = "";
try
{
while(true)
{
System.out.println("等待接收数据");
msg = dataIn.readUTF();
System.out.println("接收到数据 :"+ msg);
}

}
catch (IOException e)
{
e.printStackTrace();
}
}

}

解决方案 »

  1.   

    直接使用out输出,如下:
    out=new PrintWriter(client.getOutputStream(),true);
    out.println("hello");
      

  2.   

    给你改了一下
    分析就不给你做了import java.io.BufferedOutputStream;
    import java.io.DataOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.ArrayList;public class Server
    {
    static ArrayList list = new ArrayList();
    public static void startServer()
    {
    ServerSocket serverSocket = null;
    Socket socket = null;
    DataOutputStream dataOut = null;
    System.out.println("Server start...");
    System.out.println("waiting for clients connection:");//////////////////////////////
    SendData send = new SendData(list);
    send.start(); 
    //////////////////////////////try
    {
    serverSocket = new ServerSocket(6000);
    while(true)
    {
    socket = serverSocket.accept();
    dataOut = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
    list.add(dataOut);
    }}
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }public static void main(String[] args)
    {
    startServer();}
    }