2013-08-21 80 views
0

是否有任何解決方案通過套接字發送CR(0x0D)和LF(0x0A)?
我有一些像下面的字符緩衝區的數據。我想有一個解決方案,我可以發送一些二進制數據(範圍應該是完整的8Bit = 0x00到0xFF)。
套接字「connectedSocket」已成功設置。c + +套接字發送不傳輸CR和LF

char bufSend[] = {0x01, 0x01, 0x0A, 0x04, 0x44, 0x0D, 0x12}; 
ret = send(connnectedSocket, bufSend, 7, 0); 
if(SOCKET_ERROR == ret) { 
    printf("Error: send, code: %d\n", WSAGetLastError()); 
    return 1; 
} 

我已經得到了回報消息:10053 = WSAECONNABORTED

如果我更改,恕不的0x0A和0X0D數據的東西有沒有錯誤。

客戶端編程在Java:

if (socket.isConnected()) { 
out = new PrintWriter(new BufferedWriter(
    new OutputStreamWriter(socket.getOutputStream())), true); 

in = new BufferedReader(new InputStreamReader(
    socket.getInputStream())); 

// start connection 
out.println(CONNECTION_BEGIN); 
inMessage = in.readLine(); 
System.out.println("data length: " + inMessage.length()); 
+4

如果發送二進制數據,那麼你可能不希望使用'InputStreamReader'和'readLine'是因爲這些從根本上面向文本的界面。 –

+0

我同意查爾斯。你的用例表明你會更傾向於使用一個簡單的'read(byte [])'。一個'InputStreamReader'看起來並不合適,因爲它的定義是一個「從字節流到字符流的橋樑」(來自Sun的文檔)以及您自己聲稱的使用要求,而不是您想要的。 – WhozCraig

+0

'socket.isConnected()'測試是多餘的。如果它沒有連接,你會得到一個'ConnectException,'或者當你試圖獲取流時你會得到一個異常。 – EJP

回答

0

編寫Java客戶端讀取不是一條線了。問題是Java正在關閉連接。

+0

你能描述爲什麼java關閉連接嗎? – xaxxon

+0

因爲你讀了一行然後停下來。除非您在顯示的代碼之後執行其他操作,否則您的應用可能會退出或允許流超出範圍,從而被垃圾收集。其中任何一種都會導致連接被強制關閉。 –

0

您沒有發送行,您要發送這恰好包含的0x0A和0X0D二進制數據,但不作爲行終止。所以不要讀線。使用InputStream.read()

但很難相信,發送該真正產生ECONNABORTED和消除兩個字節固定它。