Java 为什么socket只是在Android和Linux之间转储?

Java 为什么socket只是在Android和Linux之间转储?,java,android,c++,linux,sockets,Java,Android,C++,Linux,Sockets,在我的例子中,Android应用程序应该被视为服务器,linux是客户端。 我只是将数据从linux发送到Android,每次发送4096字节。 日志显示linux成功发送了所有数据 这里是服务器,即Android。。。 服务器每次接收4096字节的数据。但是发生套接字错误,因为read(…)函数返回值-1 这是我的密码: 在使用c++的linux中: auto size=static_cast(buffer.size());//缓冲区是需要发送的数据; 自动字节发送=0,字节=0; print

在我的例子中,Android应用程序应该被视为服务器,linux是客户端。 我只是将数据从linux发送到Android,每次发送4096字节。 日志显示linux成功发送了所有数据

这里是服务器,即Android。。。 服务器每次接收4096字节的数据。但是发生套接字错误,因为read(…)函数返回值-1

这是我的密码:

在使用c++的linux中:

auto size=static_cast(buffer.size());//缓冲区是需要发送的数据;
自动字节发送=0,字节=0;
printf(“需要发送的目标数据大小:%d\n”,大小);
int-single=4096;
while(字节\发送<大小){
int remaine=大小-字节数\u发送;
如果(保持<单个){
字节=发送(socket\u client\u fd和buffer[bytes\u send],剩余,0);
}否则{
字节=发送(socket\u client\u fd和buffer[bytes\u send],单个,0);
}
如果(字节<0){

std::cerr::“发送数据失败”逻辑错误如下:

if(readed < 0)
if(读取<0)
应该是:

if(read < 0)
if(读取<0)

我建议你使用更好的变量名。
read
的过去分词是
read
而不是
readed

对不起,这是我的错,我只是在发布这个问题时犯了一个错误。我将重新编辑这个问题。你能解释一下这个“错误”是怎么回事吗发生了什么事?你的计算机中是否有某种错误破坏了剪切/粘贴操作?@SamVarshavchik不知道你在说什么。@SamVarshavchik发生了“错误”,因为我在发布此问题时将示例代码写到了这个网站。现在代码列表中的代码是
c++if(阅读<0)
,在重新编辑之前,它是
c++if(readed<0)
为什么您要“编写示例代码”,而不是简单地剪切/粘贴带有问题的确切代码?我不认为您使用的是
off
(offset)read的参数。您将其称为
readed
。这是
字节
数组的偏移量。很抱歉,我刚刚忘记将该变量更改为“bytes\u recved”,再次编辑后,我认为现在是正确的。顺便说一句,您可以通过执行以下操作来摆脱Java代码中的if语句:
remain=single
。Java命名约定对不带下划线的变量和方法使用camelCase。您使用的是c命名约定。@Tarik哦!太好了,谢谢您的建议。但我仍然想了解其中的一些内容在Android中读取套接字缓冲区时数据丢失。