请帮忙看看下列三段代码的问题:其中第二段和第三段的问题我解决不了
1.
import java.io.*;
import java.net.*;
public class MultiTalkClient { /**
 * @param args
 */
public static void main(String[] args) 
{
try
{
Socket socket=new Socket("169.254.212.93",2000);
//向本机的2000端口发出客户请求
BufferedReader in= new BufferedReader(
     new InputStreamReader(System.in));
//由系统标准输入设备构造BufferedReader对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由Socket对象得到输出流,并构造PrintWriter对象
BufferedReader is= new BufferedReader(
     new InputStreamReader(socket.getInputStream()));
//由Socket对象得到输入流,并构造相应的BufferedReader对象
String readline;
readline=in.readLine();
//从系统标准输入读入一字符串
while(!readline.equals("bye"))
//若从标准输入读入的字符串为bye则停止循环
{
os.println(readline);
//将从系统标准输入读入的字符串输出到Server
os.flush();
//刷新输出流,使Server马上收到该字符串
System.out.println("Client:"+readline);
//在系统标准输出上打印读入的字符串
System.out.println("Server:"+ is.readLine());
//从Server读入一字符串,并打印到标准输出上
readline=in.readLine();
//从系统标准输入读入一字符串
}//继续循环
os.close();//关闭Socket输出流
is.close();//关闭Socket输入流
socket.close();//关闭Socket
}catch(Exception e)
{
System.out.println("Error"+e);//出错时打印出错信息
}
}}
2.import java.io.*;
import java.net.*;
import ServerThread;
public class MultiTalkServer {
    static int clientnum=0;
//记录客户个数
public static void main(String[] args) throws IOException
{
ServerSocket serverSocket;
boolean listening=true;
try
{
serverSocket=new ServerSocket(2000);
//在端口2000监听客户请求
}catch(IOException e)
{
System.out.println("Could not listen on 2000");
 System.exit(-1);
}
            while(listening)
             //永远监听
            {
             new ServerThread(serverSocket.accept(),clientnum).start();
             //根据得到的Socket对象和客户计数创建服务线程,并启动
             clientnum++;
             //增加客户计数
            }
            serverSocket.close();
            //关闭ServerSocket
}

}3.import java.io.*;
import java.net.*;
public class ServerThread extends Thread
{
    Socket socket=null;
    //保存与本线程相关的Socket对象
    int clientnum;
    public ServerThread(Socket socket,int num)
    //构造函数
    {
     this.socket=socket;
     clientnum=num+1;
    }
    public void run()
    //线程主体
    {
     try
     {
     String line;
     BufferedReader is= new BufferedReader(
         new InputStreamReader(socket.getInputStream()));
     //由Socket对象得到输入流,并构造相应的BufferedReader对象
     PrintWriter os=new PrintWriter(socket.getOutputStream());
//由Socket对象得到输出流,并构造PrintWriter对象
     BufferedReader in= new BufferedReader(
     new InputStreamReader(System.in));
//由系统标准输入设备构造BufferedReader对象
     System.out.println("Client:"+clientnum+is.readLine());
     //在标准输出上打印从客户端读入的字符串
     line=in.readLine();
     while(!line.equals("bye"))
     //如果该字符串为bye,则停止循环
     {
     os.println(line);
     //向客户端输出该字符串
     os.flush();
     //刷新输出流,使Client马上收到该字符串
     System.out.println("Server:"+line);
     System.out.println("Client"+clientnum+is.readLine());
     line=in.readLine();
     }//继续循环
     os.close();
     is.close();
     socket.close();
     serverSocket.close();
     }catch(Exception e)
     {
     System.out.println("Error"+e);
     }
    }
}

解决方案 »

  1.   


    请帮忙看看下列三段代码的问题:其中第二段和第三段的问题我解决不了 
    1. import java.io.*; 
    import java.net.*; 
    public class MultiTalkClient { /** 
    * @param args 
    */ 
    public static void main(String[] args) 

    try 

    Socket socket=new Socket("169.254.212.93",2000); 
    //向本机的2000端口发出客户请求 
    BufferedReader in= new BufferedReader( 
        new InputStreamReader(System.in)); 
    //由系统标准输入设备构造BufferedReader对象 
    PrintWriter os=new PrintWriter(socket.getOutputStream()); 
    //由Socket对象得到输出流,并构造PrintWriter对象 
    BufferedReader is= new BufferedReader( 
        new InputStreamReader(socket.getInputStream())); 
    //由Socket对象得到输入流,并构造相应的BufferedReader对象 
    String readline; 
    readline=in.readLine(); 
    //从系统标准输入读入一字符串 
    while(!readline.equals("bye")) 
    //若从标准输入读入的字符串为bye则停止循环 

    os.println(readline); 
    //将从系统标准输入读入的字符串输出到Server 
    os.flush(); 
    //刷新输出流,使Server马上收到该字符串 
    System.out.println("Client:"+readline); 
    //在系统标准输出上打印读入的字符串 
    System.out.println("Server:"+ is.readLine()); 
    //从Server读入一字符串,并打印到标准输出上 
    readline=in.readLine(); 
    //从系统标准输入读入一字符串 
    }//继续循环 
    os.close();//关闭Socket输出流 
    is.close();//关闭Socket输入流 
    socket.close();//关闭Socket 
    }catch(Exception e) 

    System.out.println("Error"+e);//出错时打印出错信息 

    } } 2.import java.io.*; 
    import java.net.*; 
    import ServerThread; 
    public class MultiTalkServer { 
        static int clientnum=0; 
    //记录客户个数 
    public static void main(String[] args) throws IOException 

    ServerSocket serverSocket; 
    boolean listening=true; 
    try 

    serverSocket=new ServerSocket(2000); 
    //在端口2000监听客户请求 
    }catch(IOException e) 

    System.out.println("Could not listen on 2000"); 
    System.exit(-1); 

                while(listening) 
                //永远监听 
                { 
                new ServerThread(serverSocket.accept(),clientnum).start(); 
                //根据得到的Socket对象和客户计数创建服务线程,并启动 
                clientnum++; 
                //增加客户计数 
                } 
                serverSocket.close(); 
                //关闭ServerSocket 
    } } 3.import java.io.*; 
    import java.net.*; 
    public class ServerThread extends Thread 

        Socket socket=null; 
        //保存与本线程相关的Socket对象 
        int clientnum; 
        public ServerThread(Socket socket,int num) 
        //构造函数 
        { 
        this.socket=socket; 
        clientnum=num+1; 
        } 
        public void run() 
        //线程主体 
        { 
        try 
        { 
        String line; 
        BufferedReader is= new BufferedReader( 
            new InputStreamReader(socket.getInputStream())); 
        //由Socket对象得到输入流,并构造相应的BufferedReader对象 
        PrintWriter os=new PrintWriter(socket.getOutputStream()); 
    //由Socket对象得到输出流,并构造PrintWriter对象 
        BufferedReader in= new BufferedReader( 
        new InputStreamReader(System.in)); 
    //由系统标准输入设备构造BufferedReader对象 
        System.out.println("Client:"+clientnum+is.readLine()); 
        //在标准输出上打印从客户端读入的字符串 
        line=in.readLine(); 
        while(!line.equals("bye")) 
        //如果该字符串为bye,则停止循环 
        { 
        os.println(line); 
        //向客户端输出该字符串 
        os.flush(); 
        //刷新输出流,使Client马上收到该字符串 
        System.out.println("Server:"+line); 
        System.out.println("Client"+clientnum+is.readLine()); 
        line=in.readLine(); 
        }//继续循环 
        os.close(); 
        is.close(); 
        socket.close(); 
        serverSocket.close(); 
        }catch(Exception e) 
        { 
        System.out.println("Error"+e); 
        } 
        } 

      

  2.   

    改好了,楼主结贴吧,现在挣20分真不容易啊。
    第一段:import java.io.*;
    import java.net.*;public class MultiTalkServer
    {
        static int clientnum = 0;
        
        // 记录客户个数
        public static void main(String[] args) throws IOException
        {
            ServerSocket serverSocket = null;
            boolean listening = true;
            try
            {
                serverSocket = new ServerSocket(2000);
                // 在端口2000监听客户请求
            }
            catch (IOException e)
            {
                System.out.println("Could not listen on 2000");
                return;
            }
            
            while (listening)
            // 永远监听
            {
                new ServerThread(serverSocket.accept(), clientnum).start();
                // 根据得到的Socket对象和客户计数创建服务线程,并启动
                clientnum++;
                // 增加客户计数
            }
            serverSocket.close();
            // 关闭ServerSocket
        }
        
    }
      

  3.   

    第二段:class ServerThread extends Thread
    {
        Socket socket = null;
        
        // 保存与本线程相关的Socket对象
        int clientnum;
        
        public ServerThread(Socket socket, int num)
        // 构造函数
        {
            this.socket = socket;
            clientnum = num + 1;
        }
        
        public void run()
        // 线程主体
        {
            try
            {
                String line;
                BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                
                // 由Socket对象得到输入流,并构造相应的BufferedReader对象
                PrintWriter os = new PrintWriter(socket.getOutputStream());
                
                do
                {
                    // 由系统标准输入设备构造BufferedReader对象
                    line = is.readLine();                //在标准输出上打印从客户端读入的字符串
                    System.out.println("Client [" + clientnum + "] : " + line);
                    
                    os.println(line);
                    
                    // 向客户端输出该字符串
                    os.flush();
                    
                    // 刷新输出流,使Client马上收到该字符串
                    System.out.println("Server:" + line);
                    
                }while (!line.equals("bye"));// 如果该字符串为bye,则停止循环
                os.close();
                is.close();
                socket.close();
            }
            catch (Exception e)
            {
                System.out.println("Error" + e);
            }
        }
    }
      

  4.   

    第三段:class MultiTalkClient
    {
        /**
         * @param args
         */
        public static void main(String[] args)
        {
            try
            {
                Socket socket = new Socket("127.0.0.1", 2000);
              
                // 向本机的2000端口发出客户请求
                BufferedReader in = new BufferedReader(new InputStreamReader(System.in));            // 由系统标准输入设备构造BufferedReader对象
                PrintWriter os = new PrintWriter(socket.getOutputStream());
                
                // 由Socket对象得到输出流,并构造PrintWriter对象
                BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                
                String readline;
                do
                {
                    
                    //从系统标准输入读入一字符串
                    readline = in.readLine();
                    
                    //将从系统标准输入读入的字符串输出到Server
                    os.println(readline);
                    
                    //刷新输出流,使Server马上收到该字符串
                    os.flush();
                    
                    System.out.println("Client:" + readline);                // 在系统标准输出上打印读入的字符串                
                    System.out.println("Server:" + is.readLine());
                    
                }while (!readline.equals("bye"));// 若从标准输入读入的字符串为bye则停止循环
                os.close();// 关闭Socket输出流
                is.close();// 关闭Socket输入流
                socket.close();// 关闭Socket
            }
            catch (Exception e)
            {
                System.out.println("Error" + e);// 出错时打印出错信息
            }
        }
        
    }
      

  5.   

    错误更多了,需要在第三段的代码中引入第二段的ServerThread,而且经过你的更改,没有用到的ServerThread。
    原来的错误在于import ServerThread;和serverSocket.close();
    不过谢了
      

  6.   

    我用的是eclipse 这个主要是一个多人聊天的程序,当有人请求时,服务器端产生一个新的线程