Xamarin.Android和SDL_Net之间的TCP连接

时间:2017-03-09 15:02:44

标签: c# android xamarin tcp sdl-net

我正在尝试在C#Xamarin Android应用和Raspberry pi上的C ++应用之间建立TCP连接。

在C#客户端,我正在使用System.Net.Sockets中的TcpClient客户端:

// C#
static public bool Connect(string IP, string port)
{
    bool _connected = false;
    try
    {
        client = new TcpClient();
        IPAddress _ip = IPAddress.Parse(IP);
        int _port = int.Parse(port);
        client.Connect(_ip, _port);
        _connected = true;
    }
    catch
    {
        _connected = false;
    }

    return _connected;
}

正如您所见,这是TcpClient类的非常直接的使用。

在服务器端,使用SDL_Net(1.2),这是我的套接字init:

// C++
string mNet::Resolve()
{
    socketSet = SDLNet_AllocSocketSet(2);
    if(socketSet == NULL)
        return "Could not allocate socket set : " + string(SDLNet_GetError());

    if(SDLNet_ResolveHost(&serverIP, NULL, Prefs::NET_PORT) == -1)
        return "Could not resolve server host : " + string(SDLNet_GetError());

    serverSocket = SDLNet_TCP_Open(&serverIP);
    if(!serverSocket)
        return "Could not create server socket : " + string(SDLNet_GetError());

    SDLNet_TCP_AddSocket(socketSet, serverSocket);
    return "OK";
}

这是一个用于测试的虚拟监听器:

// C++
void mNet::Update()
{
    int serverSocketActivity = SDLNet_SocketReady(serverSocket);
    if (serverSocketActivity != 0)
    {
        if(!ClientConnected) // new connection
        {
            clientSocket = SDLNet_TCP_Accept(serverSocket);
            SDLNet_TCP_AddSocket(socketSet, clientSocket);
            ClientConnected = true;
            SendToClient("1");
            Logger::Log("Client connected !");
        }
        else // server busy
        {
            SendToClient("0", true);
            Logger::Log("Client refused !");
        }
    }
}

初始化时没有错误,当我运行 netstat -an |时覆盆子上的grep tcp 命令,我可以看到我正在使用的端口(1234)已打开。

但是当我尝试从android模拟器连接时,似乎没有任何事情发生在服务器端(没有套接字活动)。 IP&端口匹配。

我不习惯网络,所以我在这里做错了吗?

其他信息:

定位Android 6

RaspberryPi正在运行UbunutuMate

网络C#课程:https://github.com/arqtiq/RemotePlayerPi/blob/master/App/Network.cs

网络C ++课程:https://github.com/arqtiq/RemotePlayerPi/blob/master/Server/src/mNet.cpp

谢谢!

0 个答案:

没有答案