2011-04-24 158 views
2

我有一個客戶端發送文件到服務器併發送其他值到server.I設法傳輸文件,但它不會打開,直到我關閉socket.So我爲了發送文件在客戶端創建了另一個套接字,但是服務器將它看作是另一個客戶端,並增加了客戶端編號,並給了我一個例外,以及說> Socketexception:軟件導致連接中止:套接字寫入錯誤。是客戶端的代碼,只是爲了發送一個新的套接字,任何人都可以幫助我嗎?在此先感謝。客戶端發送文件到服務器的新套接字

try 
{ 
    Socket sendSock=new Socket("localhost", 8080); 
    outC.println("AcceptFile,"); 
    FileInputStream fis = new FileInputStream(p); 
    byte[] buffer = new byte[fis.available()]; 
    fis.read(buffer); 
    ObjectOutputStream oos = new ObjectOutputStream(sendSock.getOutputStream()) ; 
    oos.writeObject(buffer); 
    sendSock.close(); 
} 
catch(Exception c) 
{ 
    System.err.println("exc" + c); 
} 

回答

0

支持多連接的問題在服務器端。我沒有看到你將如何解決客戶端的服務器行爲。它不支持一個會話中的多個連接。

+0

我只是想解決的,因爲我發現我需要寫文件後關閉插座。 – 2011-04-24 22:13:10

1

tl; dr - 不要製造新的插座。只需包裝輸出流併發送對象。

假設OUTC也是你的服務器的連接,這樣做

outC.println("AcceptFile,"); 
FileInputStream fis = new FileInputStream(p); 
byte[] buffer = new byte[fis.available()]; 
fis.read(buffer); 
ObjectOutputStream oos = new ObjectOutputStream(originalSocket.getOutputStream()); 
oos.writeObject(buffer); 

這將一個對象寫入底層流。

現在在服務器端,你可以做到這一點

if(clientMessage.equals("AcceptFile,")) { 
    ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream()); 
    byte[] buffer = (byte[])ois.readObject(); 
    // do what you will with that 
} 
+0

@ glowcoder感謝您的回覆,但之前我使用過這段代碼,它正確地傳輸了文件,但是文件沒有打開,除非我關閉套接字,那是我的問題。 – 2011-04-24 22:09:58

+0

@Fatema你是什麼意思「文件未打開」?您正在通過套接字發送一個「byte []」。我期待着你將這個'byte []'寫入一個文件並且以這種方式使用它(或者直接使用'byte []')。你能詳細說明你的意思嗎? 「文件沒有打開?」 – corsiKa 2011-04-24 22:41:43

+0

@glowcoder我的意思是文件被創建爲例子(source.pdf),但是當我嘗試打開它,而服務器客戶端應用程序仍在運行時,pdf閱讀器程序顯示一條消息說不能讀取文件。但當我關閉應用程序並嘗試打開文件時,它被正確讀取。 – 2011-04-24 23:14:35

相關問題