我有一個簡單的TCP服務器,可以在基於文本的協議上進行通信。我從客戶端接收數據,然後發送OK/NOT OK響應。什麼是從Java套接字讀取正確的方法?
該協議具有以下格式:
<KEYWORD> <DATA>\r\n
<KEYWORD>
ASCII文本,上長度沒有限制,只是它是ATLEAST 1.
<DATA>
大多隻是ASCII文本,可以是二進制數據,在這種情況下,首先發送長度(以允許內部的\ r \ n序列)
每個命令都以\ r \ n結尾,並且<KEYWORD>
和之間總是有空格
我試圖通過字節讀取字節,如:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = socket.getInputStream();
while (tmp != ' '){
baos.write(in.read());
}
但是我遇到了一個問題,即in.read()
返回-1,如果它沒有讀什麼和我ByteArrayOutputStream
被這種-1s淹沒(和不只是-1,在調試中我看到-3,-32,3等等)。我的解決辦法是把它包在if
,就像這樣:
while (tmp != ' '){
byte tmp = in.read();
if(tmp >= 'A' && tmp <='z'){
baos.write(tmp);
}
}
,但似乎像一個適當的方式做到這一點不,因爲這也讀大寫和小寫字母之間的任何東西。如果我決定排除^
和_
,那麼我必須添加&& tmp != '^' && tmp != '_'
。
有人能指點我嗎?