gpt4 book ai didi

java - 创建一个简单的 Hello world Android 客户端-服务器程序

转载 作者:行者123 更新时间:2023-12-01 04:20:16 25 4
gpt4 key购买 nike

为了简单起见,我想做的就是从 Android 模拟器向 Eclipse 上的 Java 控制台服务器发送一条消息,其中包含一个简单的字符串,然后我希望服务器用另一个字符串进行回复。当然;我将连接到主机 10.0.2.2 并使用任何开放端口(在我的例子中为 4000)。每次我单击模拟器上的连接按钮时,服务器都会收到“已连接”消息,但我找不到传递数据包或消息的方法。

如果您想阅读一些代码,这是我的(我认为是)对于简单任务来说太长的代码。

客户端 包 com.example.clienttest;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

Thread m_objThreadClient;
Socket clientSocket;
TextView serverMessage;
EditText clientMessage;
String sIn, sOut;
ObjectOutputStream oos;
ObjectInputStream ois;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

serverMessage = (TextView) findViewById(R.id.textView1);
clientMessage = (EditText) findViewById(R.id.editText1);

}


public void Start(View view) throws IOException{
final String Text;
String send = " ";
Text = clientMessage.getText().toString();
m_objThreadClient = new Thread( new Runnable(){
public void run()
{
try {
clientSocket = new Socket("10.0.2.2", 4000);
oos = new ObjectOutputStream (clientSocket.getOutputStream());
oos.writeObject(Text);
oos.flush();

} catch (IOException e) {
serverMessage.setText(e.getMessage());
}

}
});
serverMessage.setText(send);

m_objThreadClient.start();

}

}

和服务器

import java.net.ServerSocket;
import java.net.Socket;

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;

import java.util.Hashtable;

public class Server2 {

@SuppressWarnings("resource")
public static void main (String[] args) throws IOException {

ServerSocket server = null;
try {
server = new ServerSocket(4000);
} catch (IOException e) {
System.err.println("Could not start up on: " + "4000" + "Maby server is already open? Or a portforwording messup?");
System.err.println(e);
System.exit(1);
}

Socket client = null;
while(true) {
try {
client = server.accept();
System.out.print("connected");
} catch (IOException e) {
System.err.println("Accept failed.");
System.err.println(e);
}

Thread t = new Thread(new ClientConn(client));
t.start();
}
}
}


class ClientConn implements Runnable {
private Socket client;
ObjectInputStream ois;
ObjectOutputStream oos;

ClientConn(Socket client) {
this.client = client;
try {
ois = new ObjectInputStream(client.getInputStream());
String Recv;
Recv = ois.readLine();

oos = new ObjectOutputStream(client.getOutputStream());
oos.writeChars("Welcome");
oos.flush();

oos.close();

} catch (IOException e) {
System.err.println(e);
return;
}
}

public void run() {
String msg, response;
try {
System.out.print("checking");
while ((msg = ois.readLine()) != null) {
System.out.print(msg);
}
} catch (IOException e) {
System.err.println(e);
}
}

public void sendMsg(String msg) throws IOException {
oos.writeChars(msg);
}
}

谢谢~

最佳答案

一些可能或可能无法解决问题的想法:

ObjectInputStream 的 readLine() 方法已弃用。尝试使用 DataInputStream 代替。类似于:

try {
outToClient = new DataOutputStream(socket.getOutputStream());
inFromClient = new DataInputStream(socket.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

然后:

inFromClient.readLine();

请注意,读取的行将继续读取,直到遇到换行符“\n”。因此 readLine() 将阻塞,直到读取换行符。

尝试这些方法,看看是否有帮助

编辑:看来 DataInputStream 的 readLine() 也已被弃用,但还有其他几种方法应该可以使用。例如readUTF()

关于java - 创建一个简单的 Hello world Android 客户端-服务器程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18988606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com