java - 我的应用程序中的客户端套接字未连接到 Java 服务器
问题描述
我们开发了一个 android 应用程序——仅用于智能手机的 wi-fi 服务,然后连接到运行在不同 pc 上的 java 服务器。客户端代码使用运行服务器的特定 pc 的 IP 地址。客户端代码也使用与服务器代码相同的端口号。但是客户端套接字仍然没有连接到特定的服务器,或者根本没有响应。
我的客户代码:
JAVA 文件:
package com.example.android.try1;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
public class First extends AppCompatActivity {
Button bt1;
TextView smsg;
ObjectOutputStream oos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button bt1 = (Button)findViewById(R.id.bt1);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
WifiManager wifi = (WifiManager)
getApplicationContext().getSystemService(Context.WIFI_SERVICE);
final boolean b = wifi.setWifiEnabled(true);
Socket clientSocket = null;
try {
Log.d("Initializing client","");
clientSocket = new Socket("192.168.43.193", 6666);
if (clientSocket!=null)
{
Log.d("Tested","connected");
oos = new ObjectOutputStream(clientSocket.getOutputStream());
oos.writeUTF("hii");
oos.close();
}
else
{
Log.d("Client Socket","NULL");
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
解决方案
getApplicationContext().getSystemService(Context.WIFI_SERVICE);
final boolean b = wifi.setWifiEnabled(true);
是异步操作,需要一些时间才能连接到可用的 wifi 网络所以一旦你打开 wifi,你需要等待网络连接然后尝试连接。
<receiver android:name=".NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
您应该注册网络更改广播,一旦您获得广播检查连接,然后连接到您的服务器
推荐阅读
- xaml - 如何以 xamarin 形式显示下拉菜单。IOS
- azure - 为 1 对 1 语音通话创建 1 个或多个用户
- c - 了解 CSAPP 书中的代码 open_clientfd(char *hostname, char *port)?: 参数主机名和端口的问题
- python - TypeError:“NoneType”对象不可下标错误
- anylogic - 用随机字符替换调色板和文本的 Anylogic 问题
- javascript - Vue JS - 如何获取 v-for 之外的元素的索引
- r - 类从“矩阵”突然变为“整数”
- lua - 在 Lua 5.0 中发送 HTTP POST 请求(最好不安装包)
- django - 检查当前用户电子邮件是否以
- android - 使用内部测试更新 Android 应用并保留数据