gpt4 book ai didi

java - 如何使用socket向服务器发送和接收消息?

转载 作者:行者123 更新时间:2023-12-02 11:50:35 25 4
gpt4 key购买 nike

大家好,我有一个任务,我需要向服务器发送消息,然后得到回复。我不断收到 failed 1recvfrom failed: EBADF (Bad file Descriptor) 错误,而且我对这个套接字内容很陌生。希望有人可以帮助我。这是我的异步任务:

 private class SendDataAsyncTask extends AsyncTask<Void,Void,Void>
{
private String reply = "";
@Override
protected Void doInBackground(Void... params)
{
try {
Socket socket = new Socket("ip",portNumber);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
//printWriter.write("hello there");

printWriter.println("hello there");
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
printWriter.flush();
reply = bufferedReader.readLine();
if(reply != null && !reply.equals(""))
{
Log.d(SOCKET_TESTING_TAG,"my message is " + reply);
}
else
{
Log.d(SOCKET_TESTING_TAG,"no message yet");
}
Log.d(SOCKET_TESTING_TAG,"break 3");
printWriter.close();

}
catch (IOException e)
{
Log.d(SOCKET_TESTING_TAG,"failed " + e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(Void var)
{
tv_response.setText(reply);
}
}
  • 注意:当我在 printWriter.flush() 之前放置 if 语句来检查 null readline 时,我仍然收到错误。

最佳答案

printWriter.close();

关闭套接字的输入或输出流会关闭另一个流和套接字。删除这两个出现的地方。

if(bufferedReader.readLine() != null)

这没有道理。您将丢弃该行,然后读取下一行(如果它不为空)。您需要将结果存储到变量中。

您可能需要使用 printWriter.println() 而不是 printWriter.write()。可能对等方也在读取行,而您没有发送行(没有行终止符)。

如果reply == null则表示对等方已关闭连接。不是“还没有消息”。空字符串可能是协议(protocol)错误,但它也不是“还没有消息”。

关于java - 如何使用socket向服务器发送和接收消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47899231/

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