Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java c++;套接字发送don';t发送CR和LF_Java_C++_Sockets_Winsock - Fatal编程技术网

Java c++;套接字发送don';t发送CR和LF

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”,

是否有通过套接字发送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”,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。