안녕하세요, Android 개발을 처음해본 개발자입니다. 현제 앱에서 SSID를 통해서 원하는 wifi를 연결하고 TCP 통신을 하는 프로젝트를 진행하고 있습니다. Android 13(API 수준 33)에서 connectivityManager를 통해서 wifi를 연결 한 후 TCP server와 통신 하는 것에 문제가 있습니다.
Android 상에서 와이파이를 직접 연결하면 TCP SERVER와 통신이 됩니다.


하지만 connectivityManager을 통해서 wifi를 연결후 TCP server와 통신하려고 하면 android에서는 핑조차 날라가지 않습니다. 하지만 서버에서는 핑이 잘 날라갑니다.



밑에는 코드입니다.
wifi 연결 코드
using Android.App;
using Android.Content;
using Android.Net.Wifi;
using Android.Net;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
[assembly: Dependency(typeof(RemoteAGV.Droid.WifiConnector))]
namespace RemoteAGV.Droid
{
public class WifiConnector : IWifiConnector
{
Context context;
WifiManager wifiManager;
ConnectivityManager connectivityManager;
public WifiConnector()
{
context = Android.App.Application.Context;
wifiManager = (WifiManager)context.GetSystemService(Context.WifiService);
connectivityManager = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);
}
public void ConnectToWifi(string ssid, string password)
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.Q)
{
NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
.SetSsid(ssid)
.SetWpa2Passphrase(password)
.Build();
NetworkRequest request = new NetworkRequest.Builder()
.AddTransportType(Android.Net.TransportType.Wifi)
.SetNetworkSpecifier(specifier)
.Build();
ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback();
connectivityManager.RequestNetwork(request, callback);
}
else
{
Toast.MakeText(Android.App.Application.Context, "FALSE", ToastLength.Short).Show();
}
}
}
}
TCP 통신 부분 코드
using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Sockets;
using System.Text;
namespace RemoteAGV
{
static public class COMM
{
static private TcpClient m_TcpClient = null;
static NetworkStream m_ClientStream = null;
static public Byte[] m_WriteBuffer = new Byte[10];
/* MOVE(Control Page)
//header(0~2)
* byte[0] = 60; //<
* byte[1] = 83; //S
* byte[2] = 62; //>
*
* byte[3] = mode -> 0 = 일반 1 = QD
* byte[4] = linear velocity 선속도 0.1 ~ 1.8 (value : * 10)
* byte[5] = angular velocity 각속도 5 ~ 30
* byte[6] = direction button
* byte[7] = Exclusive OR //데이터 정합성
*
*/
static public bool Connect()
{
m_TcpClient = new TcpClient();
if (m_TcpClient.ConnectAsync("192.168.0.8", 8899).Wait(1000)) //test
// 여기서 부터 TCP 연결이 안 됨
// if (m_TcpClient.ConnectAsync("10.10.100.254", 8899).Wait(200))
m_ClientStream = m_TcpClient.GetStream();
else
return false;
return true;
}
static public void Close()
{
if (m_ClientStream != null) m_ClientStream.Close();
if (m_TcpClient != null) m_TcpClient.Close();
}
public static void ClearWriteBuffer()
{
Array.Clear(m_WriteBuffer, 0, m_WriteBuffer.Length);
}
public static bool WriteData()
{
try
{
if (m_TcpClient.Connected && m_ClientStream != null)
{
m_ClientStream.Write(m_WriteBuffer, 0, m_WriteBuffer.Length);
m_ClientStream.Flush();
}
}
catch (IOException ex)
{
return false;
}
return true;
}
public static void WriteEndData()
{
ClearWriteBuffer();
Byte _BCC = 0;
//head
COMM.m_WriteBuffer[0] = 60; //<
COMM.m_WriteBuffer[1] = 83; //S
COMM.m_WriteBuffer[2] = 62; //>
COMM.m_WriteBuffer[3] = 0;
COMM.m_WriteBuffer[4] = 0;
COMM.m_WriteBuffer[5] = 0;
COMM.m_WriteBuffer[6] = 0;
for (int i = 0; i < 7; i++)
{
_BCC ^= COMM.m_WriteBuffer[i];
}
COMM.m_WriteBuffer[7] = _BCC;
WriteData();
}
}
}
해결 방법을 알면 좋겠지만 해결이 가능 여부라도 알고 싶습니다. 감사합니다.