有誰可以請解釋爲什麼byte[] buf
在服務器上不包含由客戶端發送的100,000 1?在大約60k字節的標記處,值保持全零。我承認我沒有在Streams或TCP上工作太多,所以我確信我做錯了什麼;我只是不明白它是什麼。我已經在服務器上用InputStream
和BufferedInputStream
對此進行了嘗試,結果相同。感謝任何人/每個可以花時間向我解釋這一點的人!有人請解釋爲什麼我無法通過TCP發送大字節[]到服務器
客戶端代碼非常簡單:
byte[] msgBytes = new byte[100000];
for (int i=0;i<msgBytes.length;i++){
msgBytes[i] = 1;
}
Socket sck = null;
try {
sck = new Socket("my.server.net", 1234);
OutputStream outStream = sck.getOutputStream();
outStream.write(msgBytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
sck.close();
} catch (IOException e) {
e.printStackTrace();
}
}
同樣,服務器代碼也很簡單:
ServerSocket srvSock = new ServerSocket(1234);
Socket sock = srvSock.accept();
returnAddress = sock.getInetAddress();
returnPort = sock.getPort();
BufferedInputStream iStream = new BufferedInputStream(sock.getInputStream(), 100000);
byte[] buf = new byte[100000];
iStream.read(buf);
不確定這是否是您的問題,但一般來說,您應該循環讀取流,直到達到結尾。 –
感謝您的回覆!我可以爲你舉個例子嗎?我怎麼知道這是結束? – RoboLam
BufferedInputStream.read(...)返回:讀入緩衝區的總字節數,如果由於已到達流末尾而沒有更多數據,則返回-1。 –