2014-01-05 49 views
0

基本上发送一个整数值,那么整个文件从客户机到服务器,这是我做了什么: - 客户端在Java

public class Client { 

    public String uploadFile(String filePath,int language) throws Exception { 
     Socket sock = new Socket("127.0.0.1", 25000); 


     // make the file object from filepath 
     File myFile = new File(filePath); 

     // send the integer 'language' 
     OutputStream os = sock.getOutputStream(); 
     OutputStreamWriter osw = new OutputStreamWriter(os); 
     BufferedWriter bw = new BufferedWriter(osw); 
     bw.write(language); 
     bw.flush(); 

     // send the file data 
     byte[] mybytearray = new byte[(int) myFile.length()]; 
     BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
       myFile)); 
     bis.read(mybytearray, 0, mybytearray.length); 
     os.write(mybytearray, 0, mybytearray.length); 
     os.flush(); 
     bis.close(); 

     // get the reply 
     InputStream is = sock.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 
     String message = br.readLine(); 

     sock.close(); 

     return message; 

    } 
} 

服务器端: -

void connectToNewClient(Socket sock) throws IOException, 
      InterruptedException { 

     // get the integer 'language' 

     InputStream is = sock.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 
     String language = br.readLine(); 

     // Read file data sent by client and store in server 
     byte[] mybytearray = new byte[50000]; 
     FileOutputStream fos = new FileOutputStream("Main.txt"); 
     BufferedOutputStream bos = new BufferedOutputStream(fos); 
     int bytesRead = is.read(mybytearray, 0, mybytearray.length); 
     bos.write(mybytearray, 0, bytesRead); 
     bos.close(); 

     // give back response 
     OutputStream os = sock.getOutputStream(); 
     OutputStreamWriter osw = new OutputStreamWriter(os); 
     BufferedWriter bw = new BufferedWriter(osw); 
     bw.write(response); 

     bw.flush(); 

     sock.close(); 

    } 

所以我的问题是,当我只发送文件或客户端的整数,我可以在服务器端接收它们,但是,当我尝试将它们一起发送时,我在服务器端没有收到任何东西。猜猜我已经搞乱了这么多的作家对象和数据流对象。请帮助我出错的地方。谢谢。 注意:我删除了几行代码,我认为这两行代码与我的问题无关。

+0

你试过关闭你的OutputStreamWriter吗? – SirRichie

回答

0

你正在将流包装在BufferedWriter中,这通常是一件好事,原因有很多。代码中的奇怪之处在于,您正在使用该编写器来处理Integer,并使用解包的OutputStream作为File。我怀疑,如果不重新编写作者,就不能使用这两种写作操作。

我建议你只用一名作家重构你的代码。我会选择更一般的ObjectOutputStream,它允许你发送实现Serializable接口的对象(你的场景已经满足这个约束)。您可以通过ObjectInputStream直接接收对象。