使用下面的代码我从套接字读取数据。另一方面,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”。任何人都可以解释这个的原因吗?以及如何提取我发送的确切数据。
答案 0 :(得分:1)
我的猜测是新行来自Java客户端。
客户端可能正在使用sendLine(String)
之类的函数或在传递给网络之前传递给它的字符串添加换行符。我不知道Java,但这似乎很有可能。
答案 1 :(得分:1)
在java中你可以说(正如其他人指出的那样)socket.writeLine(“Data”)在末尾附加了一个“\ n”。 有一件事我注意到,在你编写的代码中,你可能会遇到错误,如果发件人发送的超过100个字符会导致内存错误。
unsigned char buf[100];
rd=read(newsockfd,buf,1024);
这里你说你想读取最多1024个字符/字节,但缓冲区被声明为[100],小心!