首页 > 解决方案 > 我的应用程序中的客户端套接字未连接到 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();
            }
        }
    });
}

}

标签: javaandroidsocketsserverclient

解决方案


      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>

您应该注册网络更改广播,一旦您获得广播检查连接,然后连接到您的服务器


推荐阅读