[英]Java server Socket, reading content from DataInputStream
因此,我已經建立了基本的客戶端/服務器連接,並且嘗試通過連接向彼此發送消息,我讓客戶端從服務器接收消息,但是服務器未收到客戶端消息。 這是我當前用於從客戶端讀取發送的數據的代碼:
ServerThread.socket = new ServerSocket(5556);
Socket client = ServerThread.socket.accept();
DataInputStream in = new DataInputStream
(
new BufferedInputStream(client.getInputStream())
);
String s = in.readUTF();
System.out.println("Client: " + s);
使用它不會打印出任何內容,甚至不只是'Client:'
這是我的客戶端連接並發送消息的代碼。 注意:我在VB中編寫了這一部分:
client = New TcpClient()
client.Connect("myiphere", 5556)
Dim stream As NetworkStream = client.GetStream()
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Hello server")
stream.Write(sendBytes, 0, sendBytes.Length)
有什么理由不能接收數據? 還是為什么要推遲呢? 我嘗試用try catch塊替代代碼的Java部分,但沒有發出錯誤。
任何幫助將不勝感激。
DataInputStream中的UTF 前綴為0和長度。
我對VB的工作還不多,所以我不知道是否還有其他錯誤,但是請嘗試:
stream.Write(0, sendBytes.Length, sendBytes)
我不應該使用我不知道的語言來建議代碼。 如果要使用readUTF進行讀取,則必須先發送一個0
字節和一個等於字符串長度的字節,然后再發送文本字節。
編輯:您實際上可能根本不想使用DataInputStream。 它用於存儲二進制流。 如果您正在接收文本,請在Java方面嘗試以下操作:
BufferedReader in = new BufferedReader(
new InputStreamReader(
client.getInputStream()
)
);
String s = in.readLine();
如果您不發送文本,則只需像創建一個BufferedInputStream一樣,然后讀取其中的字節即可。
作為maybeWeCouldStealAVan指出, readUTF
需要兩個字節表示要多的內容的字節有。 有關詳細信息,請參見http://docs.oracle.com/javase/6/docs/api/java/io/DataInput.html#readUTF ()。
但是,他/她使用InputStreamReader
解決方案不起作用,因為InputStreamReader
期望輸入UTF-16(每個字符兩個字節),但是您的VB客戶端正在發送ascii。 如果可以的話,我建議讓您的VB客戶端發送UTF-16(然后使用也許WeCouldStealAVan的Java代碼)。 如果您不能這樣做(對不起,我不知道VB允許什么編碼),那么只需編寫使readUTF
正常工作所需的額外兩個字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.