对于我试图创建的mmo,我有一个连接到java服务器的android客户端。android正在模拟器上运行,而服务器则直接在我的计算机上运行。他们可以很好地连接并确认连接,但客户端在一个奇怪的地方停了下来,我不知道为什么。
服务器的WorkerThread的Run方法:
public void run() {
try {
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
String returns="";
String s="";
try{
s= inputStreamToString(input).toString();
}
catch(Exception e)
{}
output.write(("HTTP/1.1 200 OKnnWorkerRunnable: " +
this.serverText + " - " +
"").getBytes());
output.close();
input.close();
} catch (IOException e) {
//report exception somewhere.
e.printStackTrace();
}
}
InputStream字符串生成器:
private static StringBuilder inputStreamToString(InputStream is) {
String line = "";
StringBuilder total = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((line = rd.readLine()) != null) {
total.append(line);
}
} catch (Exception e) {
}
return total;}
客户端的连接方式:
public String sendMessage(String message)
{
try{ clientSocket = new Socket("10.0.2.2", 9000);
String modifiedSentence;
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
outToServer.writeBytes(message+"n");
//Stops here
modifiedSentence = inFromServer.readLine();
outToServer.close();
inFromServer.close();
clientSocket.close();
Log.v(modifiedSentence, modifiedSentence);
return modifiedSentence;}
catch(Exception e)
{
return "";}
}
谢谢,任何帮助都将不胜感激。
编辑:更新如果我关闭客户端或服务器,另一个可以收到前者的消息,但如果两者都打开,它们就不能。。。
试试这个:
outToServer.writeBytes(message+"n");
outToServer.flush(); // Flush output to socket
modifiedSentence = inFromServer.readLine();
还要检查您的服务器是否真的收到了数据。
一个好的做法是在执行写入之后执行flush
这将强制在套接字上进行写入
此外,我建议您将流的结束置于finally部分
(我知道这与你的问题无关,但我想帮助你更好地编码。
因此,一个结合了我的两个答案的代码应该看起来像:
OutputStream outStream = .... //Get it somehow
try {
outStream.write(data);
outStream.flush();
//Do other stuff if needed
} catch (Exception ex) {
//Do something with the exception
}
finally {
if (outStream != null) {
try {
outStream.close();
} catch (IOException ioex) {
//Ignore
}
}
}