很久没写socket哪个高手帮小弟解决一下,感激不尽,我是想服务端一直监听,当有客服端连接进来的时候就发送一个确认信息,当客户端收到的时候就发送文件给服务端 ,服务端接收完毕以后再给客户端一个信息,以便客户端处理其他的事情,就这么简单,客户端:import java.io.BufferedInputStream;    
import java.io.BufferedOutputStream;
import java.io.BufferedReader;    
import java.io.DataInputStream;    
import java.io.DataOutputStream;
import java.io.File;    
import java.io.FileInputStream;
import java.io.IOException;    
import java.io.InputStream;    
import java.io.InputStreamReader;    
import java.io.OutputStream;
import java.io.PrintWriter;    
import java.io.RandomAccessFile;    
import java.net.Socket;    
import java.net.UnknownHostException;    
   
public class AllSocketClient extends Thread {    
        
    public static void main(String[] args) {
    
     AllSocketClient x = new AllSocketClient();
     x.start();
    
    }   
    
    
    public void run(){
       
        Socket theSocket = null;    
        PrintWriter out = null;    
        BufferedReader in = null;    
            
        try {    
            theSocket = new Socket("", 12345);    
                
            in = new BufferedReader(    
                    new InputStreamReader(theSocket.getInputStream()));    
            out = new PrintWriter(theSocket.getOutputStream());    
               
                
            String fromUser, fromServer;    
                
            while(true){    
                
             char[] temps = new char[4];
             in.read(temps);
//             fromServer = in.readLine();
             fromServer = in.toString();
            
             if(fromServer.equals("bye"))    
                    break;    
                else if(fromServer.equals("Hi")){
                 System.out.println(fromServer);
                 InputStream fileInput = new FileInputStream(new File("d:/1.exe"));    
                    OutputStream fileOutput = new DataOutputStream(    
                            new BufferedOutputStream(theSocket.getOutputStream()));    
                    byte[] buf = new byte[2048];    
                    int num = fileInput.read(buf);    
                    while(num != -1){    
                        fileOutput.write(buf, 0, num);    
                        fileOutput.flush();    
                        num = fileInput.read(buf);    
                    }    
                    fileInput.close();    
                    fileOutput.close();
                    
                }
            
             if(fromServer.equals("OK")){
            
                    out.close();    
                    in.close();    
                    theSocket.close();
             break;
            
             }
                
            }   
            
            
            
        } catch (UnknownHostException e) {    
            e.printStackTrace();    
        } catch (IOException e) {    
            e.printStackTrace();    
        }    
    
    }
}    服务端:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;    
import java.io.BufferedReader;    
import java.io.BufferedWriter;    
import java.io.DataInputStream;
import java.io.DataOutputStream;    
import java.io.File;    
import java.io.FileInputStream;    
import java.io.IOException;    
import java.io.InputStream;    
import java.io.InputStreamReader;    
import java.io.OutputStream;    
import java.io.OutputStreamWriter;    
import java.io.PrintWriter;    
import java.io.RandomAccessFile;
import java.net.ServerSocket;    
import java.net.Socket;    
import java.util.HashMap;    
import java.util.Map;    
   
public class AllSocketServer extends Thread{ 

    private Socket socket;    
        
    public AllSocketServer(Socket socket){    
        this.socket = socket;    
        start();    
    }    
        
    public void run() {    
    
        try {    
            BufferedReader in = new BufferedReader(    
                    new InputStreamReader(socket.getInputStream()));    
            PrintWriter out = new PrintWriter(    
                    new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);    
                
            out.println("Hi");    
                
//            while(true){  
            
             File newFile = new File("f:/1.exe");    
                newFile.createNewFile();    
                RandomAccessFile raf = new RandomAccessFile(newFile, "rw");    
                    
                InputStream fileInput = new DataInputStream(    
                        new BufferedInputStream(socket.getInputStream())); 
                
                byte[] buf = new byte[2048];    
                    
                int num = fileInput.read(buf);    
                while(num != -1){    
                    raf.write(buf, 0, num);    
                    raf.skipBytes(num);    
                    num = fileInput.read(buf);    
                }
                
                in.close();    
                raf.close();
                
                if(num == -1){
                 out.print("OK");
                 System.out.println("queding");
//                   break;
                }
 
//            }  
            
            
//            in.close();    
//            out.close();    
            System.out.println("Disconnected from " + socket.getRemoteSocketAddress());    
//            socket.close();    
        } catch (IOException e) {    
            e.printStackTrace();    
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
    }    
            
   
    public static void main(String[] args) {    
            
        try {    
            ServerSocket serverSocket = new ServerSocket(12345);    
            System.out.println("Server Started");    
            try {    
                while(true){    
                    Socket theSocket = serverSocket.accept();    
                    try {    
                        new AllSocketServer(theSocket);    
                    } catch (Exception e) {    
                        e.printStackTrace();    
                        theSocket.close();    
                    }    
                }    
            } catch (Exception e) {    
                e.printStackTrace();    
            } finally {    
                if(serverSocket != null)  {}  
            }    
        } catch (IOException e) {    
            e.printStackTrace();    
        }    
    }    
}