gpt4 book ai didi

android - 重新连接到Android套接字以等待服务器

转载 作者:行者123 更新时间:2023-12-03 11:57:14 26 4
gpt4 key购买 nike

因此,我在Windows中使用C++编程编写了TCP服务器,并在JAVA,Android 4.0.4中编写了一个客户端。

在Android中,我这样连接:

public boolean sendConnectRequest()
{
while (isSocketConnected == false)
{
try {
if(comSocket == null)
comSocket = new Socket("192.168.0.1",1531);
isSocketConnected = comSocket.isConnected();
if (isSocketConnected) {
out = comSocket.getOutputStream();
in = comSocket.getInputStream();
}
else
comSocket.close();
}
catch (IOException ex)
{
Log.e("TCP Error", ex.getLocalizedMessage());
}
}
return true;
}

我通常在与服务器的第一次连接上使用此代码都没有问题。

当我与服务器断开连接时,我称其为:
public void closeConnection() {
if (comSocket != null)
{
try {
comSocket.close();
isSocketConnected = false;
if (out != null)
out.close();
if (in != null)
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

这就是问题所在...我按下了智能手机上的“主页”按钮,这使程序处于暂停状态。我再次启动该程序,并在 Activity 中调用resume函数,这继而启动了重新连接的过程。尝试连接,但我没有收到任何错误。但是,我的Windows服务器未记录任何连接。在Windows中,我知道我仍然被阻止在:
SOCKET connectionSocket = accept(tcpNetworkData->socket, (struct sockaddr*)&from, &fromlen);

我相信这是正常的。当我在Android端处于 Debug模式时,我注意到它从该行立即返回:comSocket = new Socket(“192.168.0.1”,1531);这应该向我表明已建立连接。

如果您到目前为止一直关注我...我还应该说,如果我关闭服务器,客户端将通过关闭连接并打开新的连接来重置。这次comSocket = new Socket(“192.168.0.1”,1531)不会像应有的那样阻塞,并且执行继续进行。这显然是错误的。我认为这是资源释放的问题,但是为什么呢?使用Winsock,您可以使用以下代码行解决此问题:
int so_reuseaddr = TRUE;
setsockopt(networkData->socket, SOL_SOCKET, SO_REUSEADDR, (const char*)&so_reuseaddr,sizeof(so_reuseaddr));

您可以使用Android做类似的事情还是必须做?谢谢您的帮助!

最佳答案

根据javadoc,一旦调用构造函数,就建立了连接。

  Socket(InetAddress address, int port)
Creates a stream socket and connects it to the specified port number at the specified IP address.


当您按下主屏幕按钮时,您的应用程序将进入后台运行,但不会立即被杀死,因此当您返回到应用程序时,您的 comSocket可能不为null。在这种情况下,您不会再次调用构造函数,因此不会重新连接到服务器。你应该做的是
if(comSocket == null){
comSocket = new Socket("192.168.0.1",1531);
}else{
comSocket.connect(new InetSocketAddress("192.168.0.1",1531));
}

(并且请放置大括号:-))

关于android - 重新连接到Android套接字以等待服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15396142/

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