gpt4 book ai didi

java - Android 客户端/Java 服务器套接字; android发送但不接收?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:00 25 4
gpt4 key购买 nike

我已经搜索了四个小时,这让我抓狂。如果您需要更多信息/代码,我会尽量保持简短,我会进行编辑。

所以我有一个 Android 客户端,它使用 PrintWriter 和 BufferedReader 连接到服务器。它的工作方式是启动一个新的 ASyncTask() 来加载连接。建立连接后,它会向服务器发送一条“加入”消息,然后加载一个监听线程,该线程有一个等待 UserInput.readLine() != null 的 while 循环,一旦中断,它会返回一个运行进程的字符串获取字符串并执行操作并重新加载监听任务的函数。

 //Listener thread
class listen extends AsyncTask<Integer, Integer, Void> {

@Override
protected Void doInBackground(Integer... params) {
//Disconnect variable that's only turned true on backpress
if (!disconnect) {
try {
message = Connection.listen(); //socket object
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

return null;
}

@Override
protected void onPostExecute(Void result) {
// async task finished
if (!disconnect) {

say("INCOMMING"); //easy-made function for Toast
input(message);
}

}

}

在那个连接中:

public String listen() throws IOException {
String userInput;

while ((userInput = in.readLine()) != null) {

}

return userInput;
}

现在在我的服务器 java 应用程序中,我有一个线程将其他连接线程加载到 ArrayList 中,并充当总部向所有子客户端发送消息

在我的连接中:

            while ((inputLine = in.readLine()) != null) {   
//Tells HQ to process string, with id being who it's coming from
hq.Process(id, inputLine);
if (!connected)
break;
}

在 HQ 对象中:

public void Process(int id, String str) {
String[] msg = str.split(","); //split message
String send = " "; //string I print to console

if (msg[0].equals("join")) {
send = msg[1] + " has joined!";
parent.seats[cnew.get(id).seat] = id;
cnew.get(id).sendData();
System.out.println(id);
}

加入后,HQ会告诉那个连接把那个玩家的信息发送到手机上

   public void sendData() {
out.println("chips," + chips); // Update chip count

//give player his cards
out.println("card," + hq.parent.gameCards.getCard(10) + ","
+ hq.parent.gameCards.getCard(11));

//a cry for help to get some output on the phone
out.println("error,SAY THIS");

// out.flush(); //commented out because it didn't help at all

System.out.println("sending id " + id); //debug checker (ignore this)
}

我的问题是,当我连接了四部手机并且它们都互相发送 toast 时它起作用了。但是,一旦我将其更改为在玩家加入后立即发回数据,我在 Android 中就根本没有收到任何响应。

我不明白为什么它不起作用。在服务器端,它会遍历所有内容(通过 system.prints 检查)。连接已建立,当我点击电话上的按钮时,服务器正在输出它的响应。但是手机没有收到任何东西——我仍然不知道是服务器发送失败还是手机读取失败。您能在代码中看到任何可能导致此问题的内容吗?需要看更多吗?或者有任何关于如何调试连接状态的提示? listen() 任务永远不会完成它的执行了。

更新:所以我发现这可能与我在 android 端的 while() 循环有关,doh,可能永远不会中断。愚蠢的错误。但我试图将其添加为测试人员,但仍然一无所获:

public String listen() throws IOException {
String userInput;

while ((userInput = in.readLine()) != null) {
if (userInput.length() > 2)
break;
}

return userInput;
}

更新:下一次绝望的更新——当我点击“返回”(它向关闭连接的服务器发送退出消息,并调用 out.close 和 rest.close)时,我得到一个永无止境的“MSG”Toast 循环——我在输入时放置的 Toast被认可。 out.close 是否导致阻塞?

最佳答案

事实证明,服务器端的 println 并没有打印新行——在服务器消息末尾添加 + "\n"使其通过。为什么?我不知道..

关于java - Android 客户端/Java 服务器套接字; android发送但不接收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6978753/

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