![](/img/trans.png)
[英]sending objects through TCP socket from java server to android client
[英]Sending objects through sockets java TCP server to android app
我正在編寫一個客戶端-服務器對,其中服務器是在Linux上運行的Java TCP服務器,客戶端是在Android Studio中開發的Android應用。
我已經成功地建立了一個客戶端-服務器對,可以彼此發送Message
對象,但是當我嘗試在Android應用中實現類似功能時,似乎什么也沒發生。
Android應用程序可以正常工作,而只是通過BufferedReader
和Printwriter
類的readLine()
和println()
方法發送Strings
,而不是通過ObjectOutput
/ InputStream
類的readObject()
和writeObject()
發送Strings
。
還嘗試了writeUnshared()
/ readUnshared()
方法,但沒有readUnshared()
運氣。
//Message.java
package Message;
import java.io.*;
public class Message implements Serializable {
String msg;
String tag;
String username;
private static final long serialVersionUID = 4L;
// Methods.
}
// Reading MessageObjects in Server.java.
@Override
public void run() {
Message message = null;
try {
while ((message = (Message)reader.readObject()) != null) {
// Processing message.
}
}
}
// Sending Message Objects in android App.
public void onClick(View v) {
if(!msgBox.getText().toString().equals("")) {
final String msg;
try {
msg = msgBox.getText().toString();
writer.writeObject(new Message(msg, CLIENT, username));
msgBox.setText("");
writer.flush();
// Updating ui etc.
}
catch (IOException e) {
e.printStackTrace();
}
textBox.smoothScrollBy(textBox.getMaxScrollAmount(), 100);
}
}
// Connection-method in android app, initalizes streams.
private boolean connect(String username, String address, int port) {
boolean connected = false;
try {
server = new Socket(address, port);
InputStreamReader(server.getInputStream());
reader = new ObjectInputStream(server.getInputStream());
writer = new ObjectOutputStream(server.getOutputStream());
writer.writeObject(new Message("!newUser",AUTOMATED,username));
writer.flush();
connected = true;
System.out.println("Connected!");
}
catch (Exception ex) {
ex.printStackTrace();
System.out.println("Cannot Connect!");
connected = false;
// UI-things.
}
if(connected){
// Thread that listens for replies.
listenThread();
}
return connected;
}
ObjectInputStream
之前創建ObjectOutputStream
。 否則,您可能會陷入僵局。 readObject()
在流的末尾不會返回null,因此使用null作為循環條件沒有任何意義。 發送空值時,它可以返回空值。 當捕獲到EOFException
時,循環應終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.