0
私は、サーバーがLinux上で動作するjava TCPサーバーで、クライアントがAndroid Studioで開発されたAndroidアプリケーションであるクライアントとサーバーのペアを作成しています。ソケット経由でオブジェクトを送信するjava TCPサーバーとアンドロイドアプリケーション
Message
オブジェクトをお互いに送信するクライアントとサーバーのペアを正常に作成しましたが、Androidアプリで同様の機能を実装しようとすると何も起こりそうにありません。
Androidアプリの作品だけではなく、ObjectOutput
/InputStream
クラスからreadObject()
とwriteObject()
と、BufferedReader
とPrintwriter
クラスからreadLine()
とprintln()
方法でStrings
を送信中。
また、writeUnshared()
/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;
}
これらのいわゆる「ObjectInput」および「ObjectOutput」ストリームはどこで宣言され、初期化されていますか?私はあなたが実際に私たちに完全な問題を見せているとは思わない。 – 3kings
私はそれがコマンドラインクライアントで動作しているので、サーバが正しく動作していると思う。アンドロイドアプリからの接続方法を追加しました – Jokke
だから私は何を伝えることができますか?あなたは正しいメインスレッド上のネットワークを行っていないのですか? – 3kings