C++ 套接字发送不传输 CR 和 LF

c++ socket send don't transmit CR and LF

本文关键字:CR LF 传输 套接字 C++      更新时间:2023-10-16

有没有通过套接字发送CR(0x0D)和LF(0x0A)的解决方案
我有一些数据,比如下面的字符缓冲区。我想要一个能够发送一些二进制数据的解决方案(范围应该是完整的8Bit=0x0到0xFF)
套接字"connectedSocket"已成功设置。

char bufSend[] = {0x01, 0x01, 0x0A, 0x04, 0x44, 0x0D, 0x12};
ret = send(connnectedSocket, bufSend, 7, 0);
if(SOCKET_ERROR == ret) {
    printf("Error: send, code: %dn", 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());

您不是在发送行,而是在发送碰巧包含0x0A和0x0D的二进制数据,但不是作为行终止符。所以不要读台词。使用InputStream.read()

但很难相信发送这个消息真的会产生ECONNABORTED,而删除两个字节会修复它

编写Java客户端以读取多于一行的内容。问题是Java正在关闭连接。