zhiji ding~~~~~~~~~只要能做出来,不够分还可以再加啊。

解决方案 »

  1.   

    客户端第二次怎么读的呀?while(true){
     byte[] bar = new byte[320 * 240 * 3];
      dis.read(bar);
    }
    还是在这个循环中读么?这个循环中读的dis流是在第几次的时候生成的呀?你是不是该把 is=socket.getInputStream();
     bis = new BufferedInputStream(is);
     dis = new DataInputStream(bis);也放到While 循环中来?
      

  2.   

    我贴一个Server和Client的代码,你看看Server.java
    import java.net.*;
    import java.io.*;public class Server{
            private ServerSocket ss;
            private Socket socket;
            private BufferedReader in;
            private PrintWriter out;        public Server(){
            try{
                    ss = new ServerSocket(2003);
                    while (true){
                            socket = ss.accept();
                            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                            out = new PrintWriter(socket.getOutputStream(),true);                      //  String line = in.readLine();
                            out.println("you input is :" + in.readLine());
                            out.close();
                            in.close();
                            socket.close();
                    }
                    //ss.close();
            }
            catch(IOException e){
            e.printStackTrace();
            }
            }        public static void main(String[] args){
                    Server aa=new Server();
            }
    }-------------------------------
    Client.javaimport java.io.*;
    import java.net.*;public class Client
    {
            Socket socket;
            BufferedReader in;
            PrintStream out;        public Client(){
                    try{
                            socket = new Socket("192.168.0.66", 2003);
                            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                            out = new PrintStream(socket.getOutputStream());
                            BufferedReader line = new BufferedReader(new InputStreamReader(System.in));//                        if(line.readLine().equals("exit"))
                            String aa=line.readLine();
                              out.print(aa);
                              out.flush();
                            //line.close();
                            //out.close();
                            //in.close();
                            //socket.close();
                    }
                    catch (IOException e){
                    e.printStackTrace();
                    }
            }        public static void main(String[] args){
                    Client bb=new Client();
            }
    }
      

  3.   

    兄弟,你这是逻辑错误。 每接收一次或是发送一次,都要实例化一次输入流或输出流。 你把while循环写到实例化数据流的外面再试试!再就是,每次循环时加上  Thread.sleep(100); 不然的话,你的其他线程就没有cpu资源了. 关键是把while循环写在数据流的外面。
      

  4.   

    以下是我写的一个Servlet/JSP服务器的启动程序,未作整理,看看吧,其中ServerConnection类是一个线程,在线程中作数据读取和输出的工作,这很简单,增加上迸发能力package com.dream.mess;import org.apache.log4j.*;
    import org.apache.commons.logging.LogFactory;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.impl.LogFactoryImpl;
    import org.xml.sax.SAXException;import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.IOException;
    import java.io.File;import com.dream.mess.http.ServerConnection;
    import com.dream.mess.container.WebContainer;/**
     * Created by IntelliJ IDEA.
     * @version 1.0
     * @author TaoJianFeng
     */
    public class Server
    {
        public static final String SERVER_HOME = "mess.server.home"; private static Server server = null; private String home = null;
    private ServerConfig config = null; private Log log = LogFactory.getLog("Server"); public synchronized static Server getServer()
    {
         if(server == null)
        server = new Server();
    return server;
    }
    public String getServerName()
    {
    return "Mess/1.0";
    }
    public int getServerPort()
    {
    return config.getPort();
    }
    private Server()
    {
    if(System.getProperty(LogFactoryImpl.LOG_PROPERTY) == null)
    System.setProperty(LogFactoryImpl.LOG_PROPERTY, "org.apache.commons.logging.impl.Log4JLogger"); home = System.getProperty(SERVER_HOME);
    File file = new File(home);
    if(file.exists() && file.isDirectory())
    {
    home = file.getAbsolutePath();
    }
    else throw new RuntimeException("Server home not set");
    log.info("ServerHome: " + home); try
    {
    config = ServerConfig.getServerConfig(home);
    }
    catch (SAXException e)
    {
    throw new RuntimeException(e.getMessage());
    }
    catch (IOException e)
    {
    throw new RuntimeException(e.getMessage());
    } log.info("Server configuration read");
    }
    public ServerConfig getConfig()
    {
    return config;
    }
    public String getHome()
    {
         return home;
    }
    public void run()
    { log.info("Loading Web Applications......");
    //container.load();
            WebContainer.getInstance().initResource();
    WebContainer.getInstance().startDeployer();
    ServerSocket ss = null;
    try
    {
    log.info("Starting Mess Server......");
    ss = new ServerSocket(Server.getServer().getConfig().getPort());
    log.info("Mess Server is listening port: " + String.valueOf(Server.getServer().getConfig().getPort()));
    while(true)
    {
    Socket socket = ss.accept();
    ServerConnection con = new ServerConnection(socket);
    con.start(); } }
    catch (IOException e)
    {
    e.printStackTrace();  //To change body of catch statement use Options | File Templates.
    }
    }
    public static void main(String[] args)
    {
    Layout layout = new PatternLayout("%d %-5p [%c{1}] - %m%n");
    Logger.getRootLogger().addAppender(new ConsoleAppender(layout, ConsoleAppender.SYSTEM_OUT));
    Logger.getRootLogger().setLevel(Level.INFO); Runtime.getRuntime().addShutdownHook(new Thread()
    {
    public void run()
    {
    Log log = LogFactory.getLog(Server.class);
    log.info("Shutdown!");
    }
    }); Server server = Server.getServer();
    server.run(); }
    }
      

  5.   

    谢谢各位高手的指导。
    其实我当时写程序时也是参考别人的程序来写的。只是学东西只学了一半,还剩一半没学。真是惭愧。听大家这么一说,我终于知道自己还差哪一半没学业了。:P其实我参考的程序,它运用的是server-push技术。所以在while循环中没有生成新的socket。它是用新的传来的数据去替代原来缓存区中的旧的数据。所以只要读回原来的输入流就行了。呵呵,只怪当时没有研究透,现在看了各位的回复才晃然大悟。谢了。分不够的话,可以私下和我联系。分嘛,好说。呵呵。:)
      

  6.   

    还有。我的原意是以为server和client建立联接后。server不断的往里写东西。client就可以不断的读出来。不是的嘛???嗯,这个问题还想向大家请教,一定要再实例化一个socket???