【发布时间】:2016-04-30 17:48:32
【问题描述】:
我有一个使用 LipeRMI (http://lipermi.sourceforge.net/) 连接到 Java 服务器的 Android 客户端。
为了测试这种通信,我在界面中有一个按钮,单击该按钮时会发送一个字符串“Test”。它到达服务器,服务器返回字符串。它工作正常,问题是它只工作一次。服务器只接受一次。
我的服务器代码如下:
public class TestServer implements TestService {
public TestServer() {
try {
CallHandler callHandler = new CallHandler();
callHandler.registerGlobal(TestService.class, this);
Server server = new Server();
server.bind(7777, callHandler);
server.addServerListener(new IServerListener() {
@Override
public void clientDisconnected(Socket socket) {
System.out.println("Client Disconnected: " + socket.getInetAddress());
}
@Override
public void clientConnected(Socket socket) {
System.out.println("Client Connected: " + socket.getInetAddress());
}
});
System.out.println("Server Listening");
} catch (LipeRMIException | IOException e) {
e.printStackTrace();
}
}
@Override
public String getResponse(String data) {
System.out.println("getResponse called");
System.out.println("The information received was: " + data);
return "Your data: " + data;
}
在 Android 客户端中,我的 MainActivity 中有以下内容:
public class MainActivity extends Activity {
private String serverIP = "192.168.3.8";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnGet = (Button) findViewById(R.id.send);
btnGet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new Conn().execute();
}
});
}
class Conn extends AsyncTask<Void, Void, MainActivity> {
@Override
protected MainActivity doInBackground(Void... params) {
Looper.prepare();
try {
CallHandler callHandler = new CallHandler();
Client client = new Client(serverIP, 7777, callHandler);
TestService testService = (TestService) client.getGlobal(TestService.class);
String msg = testService.getResponse("Test");
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
Looper.loop();
return null;
}
}
它们有共同的 TestService 接口,因此我可以使用来自服务器的方法。
如何更改服务器以便它可以多次接受来自 Android 客户端的调用?
【问题讨论】:
-
您在计算连接数还是调用数?
-
不,我不是。
-
是的,因为你说服务器只接受一次。你不能不计算就知道这一点。我的问题是您将什么视为接受:连接还是调用?