2013-05-29 43 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