Java Python套接字服务器不支持';无法正确发送数据库文件
我正在尝试使用套接字将数据库文件从python服务器(PC)传输到java应用程序客户端(Android studio) 我能够毫无问题地传输文件,但当我传输数据库文件时,我就是不能使用它 android studio给出此错误:Java Python套接字服务器不支持';无法正确发送数据库文件,java,python,android-studio,sockets,client-server,Java,Python,Android Studio,Sockets,Client Server,我正在尝试使用套接字将数据库文件从python服务器(PC)传输到java应用程序客户端(Android studio) 我能够毫无问题地传输文件,但当我传输数据库文件时,我就是不能使用它 android studio给出此错误: (11) malformed database schema (?) E/DefaultDatabaseErrorHandler: Corruption reported by sqlite on database: /data/user/0/com.example.
(11) malformed database schema (?)
E/DefaultDatabaseErrorHandler: Corruption reported by sqlite on database: /data/user/0/com.example.serverclient/databases/trempi.db
deleting the database file: /data/user/0/com.example.serverclient/databases/trempi.db
比较原始数据库文件和接收到的文件的长度。除非原始文件的长度不超过4096字节,
file.read(4096)
只读取数据库的第一部分,否则您将收到一个被截断的损坏文件。请改为尝试file.read()
损坏文件比原始文件小4kb 现在Python服务器中的错误已经纠正,Java应用程序客户端中仍然存在一个错误:由于套接字读取一次可能只返回发送数据的一部分,因此仅调用
read
一次是不够的;所以改变
is.read(b,0,b.length);
fr.write(b,0,b.length);
到
现在比较原始数据库文件和接收到的文件的长度的结果是什么?损坏文件比原始文件小4kb。我解决了另一个问题。
**Client(Android-Studio)**
and here is my MainActivity in android studio:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=findViewById(R.id.tv1);
btn=findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Thread myThread=new Thread(new MyServer());
myThread.start();
}
class MyServer implements Runnable
{
Handler handler=new Handler();
@Override
public void run() {
try {
byte[] b=new byte[100000];
Socket s=new Socket("192.168.14.87",9012);
InputStream is=s.getInputStream();
FileOutputStream fr=new FileOutputStream(getDatabasePath("trempi.db").toString());
is.read(b,0,b.length);
fr.write(b,0,b.length);
s.close();
is.close();
fr.close();
Intent go=new Intent(MainActivity.this,Data.class);
startActivity(go);
} catch (IOException e) {
e.printStackTrace();
}
}
}
is.read(b,0,b.length);
fr.write(b,0,b.length);
int len;
while ((len = is.read(b, 0, b.length)) > 0) fr.write(b, 0, len);