2013-05-29 46 views
1

使用下面的代碼我從套接字讀取數據。另一方面,Java客戶端發送字符串數據。但在讀取數據時,字符串的末尾會出現一個附加的\ n。任何人都可以解釋爲什麼會發生。套接字從Java客戶端讀取 n末尾

代碼:

unsigned char buf[100]; 
    rd=read(newsockfd,buf,100); 
    char cmd[30]; 
    sprintf(cmd,"%s",buf); 

結果:

buf->"DATA\n" 
cmd->"DATA\n" 

從客戶端,如果我發送 「DATA」 然後我在服務器端收到 「DATA \ n」。任何人都可以解釋這個原因嗎?以及如何提取我發送的確切數據。

+2

難道是另一邊的Java客戶端在它發送的數據的末尾添加了換行符?我可以很容易想象一個像'sendLine()'這樣的函數,該函數接受'String'作爲參數,並自行決定在最後添加一個換行符。 – ereOn

+0

如果您將兩個緩衝區初始化爲C端的空字符,該怎麼辦? – Fred

+0

@ ereOn是的,我正在使用println(「str」),這可能是原因。非常感謝您提供有價值的信息。 – Haris

回答

1

我的猜測是換行符來自Java客戶端本身。

可能客戶端使用的功能如sendLine(String)在發送給網絡之前向其傳遞的字符串添加了換行符。我不知道Java,但這很可能。

1

在java中,你可以說(正如其他人指出的那樣)socket.writeLine(「Data」)在最後附加一個「\ n」。 我注意到的一件事是,在您編寫的代碼中,如果發件人向您發送了超過100個字符,則會出現內存錯誤,但可能會出現錯誤。

unsigned char buf[100]; 
rd=read(newsockfd,buf,1024); 

在這裏你說你想讀取1024字節/字節但緩衝區被聲明爲[100],小心!

+0

感謝您注意到這個錯誤,但我在客戶端發送最多20個字節 – Haris

相關問題