Java c++;套接字发送don';t发送CR和LF
是否有通过套接字发送CR(0x0D)和LF(0x0A)的解决方案?Java c++;套接字发送don';t发送CR和LF,java,c++,sockets,winsock,Java,C++,Sockets,Winsock,是否有通过套接字发送CR(0x0D)和LF(0x0A)的解决方案? 我有一些数据,比如下面的字符缓冲区。我希望有一个能够发送一些二进制数据的解决方案(范围应为8比特=0x00到0xFF)。 已成功设置套接字“connectedSocket” charbufsend[]={0x01、0x01、0x0A、0x04、0x44、0x0D、0x12}; ret=发送(connnectedSocket,bufSend,7,0); if(套接字错误==ret){ printf(“错误:发送,代码:%d\n”,
我有一些数据,比如下面的字符缓冲区。我希望有一个能够发送一些二进制数据的解决方案(范围应为8比特=0x00到0xFF)。
已成功设置套接字“connectedSocket”
charbufsend[]={0x01、0x01、0x0A、0x04、0x44、0x0D、0x12};
ret=发送(connnectedSocket,bufSend,7,0);
if(套接字错误==ret){
printf(“错误:发送,代码:%d\n”,WSAGetLastError());
返回1;
}
我收到了返回消息:10053=WSAECONNABORTED
如果我将数据更改为没有0x0A和0x0D的数据,则不会出现错误
客户机是用java编程的:
if(socket.isConnected()){
out=新的PrintWriter(新的BufferedWriter(
新的OutputStreamWriter(socket.getOutputStream()),true);
in=新的BufferedReader(新的InputStreamReader(
getInputStream());
//启动连接
out.println(连接开始);
inMessage=in.readLine();
System.out.println(“数据长度:+inMessage.length());
编写Java客户端以读取多行。问题是Java正在关闭连接。编写Java客户端以读取多行。问题是Java正在关闭连接。您没有发送行,而是发送碰巧包含0x0A和0x0D的二进制数据,但不是作为行终止符。So不读取行。使用InputStream.read()
但是很难相信发送这个数据真的会产生Econabored,删除两个字节就可以修复它。你不是在发送一行,你是在发送二进制数据,碰巧包含0x0A和0x0D,但不是作为行终止符。所以不要读取行。使用
InputStream.read()
但是很难相信发送这个文件真的会产生Econabored,删除两个字节就能修复它。如果发送二进制数据,那么你可能不想使用
InputStreamReader
和readLine
,因为它们基本上都是面向文本的接口。我同意Charles的观点。你的用例建议你e更倾向于使用简单的读取(byte[])
。InputStreamReader
显然不合适,因为它根据定义是“…从字节流到字符流的桥梁”(来自Sun的文档),根据您自己声明的使用要求,而不是您想要的。socket.isConnected()
测试是多余的。如果它没有连接,你会得到一个连接异常,
,或者当你尝试获取流时会得到一个异常。如果你发送二进制数据,那么你可能不想使用InputStreamReader
和readLine
,因为这些基本上都是面向文本的接口。我同意您的用例建议您更倾向于使用简单的读取(byte[])
。InputStreamReader
显然不合适,因为根据定义它是“…从字节流到字符流的桥梁”(来自Sun的文档),并且根据您自己声明的使用要求,而不是您想要的测试是多余的。如果它没有连接,你会得到一个连接异常,
或者当你尝试获取流时,你会得到一个异常。你能描述一下为什么java会关闭连接吗?因为你读了一行,然后就停止了。除非你在显示代码之后做了其他事情,否则你的应用可能会XIT或允许流超出作用域,从而被垃圾收集。这两种情况都会导致连接被强制关闭。问题是OP的应用程序正在关闭连接,或者操作系统在进程退出时关闭连接。Java不会自动关闭连接。您能描述一下Java为什么要关闭连接吗n?因为你读了一行,然后就停止了。除非你在显示代码之后做了其他事情,否则你的应用程序可能会退出或允许流超出范围,从而被垃圾收集。这两种情况都会导致连接被强制关闭。问题是OP的应用程序正在关闭连接,或者OP进食系统是当进程退出时,Java不会自动关闭conenctions。