Komunikacja UDP między laptopem a androidem.

0

Witam, na wstępie zaznaczę, że na razie w temacie komunikacji, programowania raczej raczkuję także mogą pojawić się babole, ale kto nie próbuje... :)
To tak , chcę skomunikować się za pomocą laptopa z telefonem z androidem. Od strony "fizycznej" wygląda to tak: w telefonie ściągam UDP Sender, włączam te samo Wi-fi co w laptopie, wpisuje w UDP sender IP wi-fi, port na którym działa program i próbuję coś wysłać, w komputerze zaś, mam odpalony w tym czasie program do komunikacji. Ale ciągle jest Waiting for data. Próbowałem w IP serwera wpisywać jakieś inne IP niż to wifi, ale też nic nie działa. Od strony technicznej wrzucam kod i screeny konfiguracji :

#include <stdio.h>
#include <stdlib.h> // exit()
#include <string.h> // memset()
#include <arpa/inet.h> // inet_pton()
#include <sys/socket.h>

#define SERWER_PORT 8888
#define SERWER_IP "192.168.17.128"


int main()
{
    struct sockaddr_in serwer =
    {
        .sin_family = AF_INET,
        .sin_port = htons( SERWER_PORT )
    };
    if( inet_pton( AF_INET, SERWER_IP, & serwer.sin_addr ) <= 0 )
    {
        perror( "inet_pton() ERROR" );
        exit( 1 );
    }
    
    const int socket_ = socket( AF_INET, SOCK_DGRAM, 0 );
    if(( socket_ ) < 0 )
    {
        perror( "socket() ERROR" );
        exit( 2 );
    }
    
    char buffer[ 4096 ] = { };
    
    socklen_t len = sizeof( serwer );
    if( bind( socket_,( struct sockaddr * ) & serwer, len ) < 0 )
    {
        perror( "bind() ERROR" );
        exit( 3 );
    }
    
    while( 1 )
    {
        struct sockaddr_in client = { };
        
        memset( buffer, 0, sizeof( buffer ) );
        
        printf( "Waiting for connection...\n" );
        if( recvfrom( socket_, buffer, sizeof( buffer ), 0,( struct sockaddr * ) & client, & len ) < 0 )
        {
            perror( "recvfrom() ERROR" );
            exit( 4 );
        }
        printf( "|Message from client|: %s \n", buffer );
        
        char buffer_ip[ 128 ] = { };
        printf( "|Client ip: %s port: %d|\n", inet_ntop( AF_INET, & client.sin_addr, buffer_ip, sizeof( buffer_ip ) ), ntohs( client.sin_port ) );
        
        strncpy( buffer, "Message for client", sizeof( buffer ) );
        
        if( sendto( socket_, buffer, strlen( buffer ), 0,( struct sockaddr * ) & client, len ) < 0 )
        {
            perror( "sendto() ERROR" );
            exit( 5 );
        }
    }
    
    shutdown( socket_, SHUT_RDWR );
}

title
title

0

Firewall Ci czegoś nie blokuje? Na dzień dobry zamiast tego kodu w C odpal pod linuxem
ncat -ul 8888 i zobacz czy możesz pogadać z telefonem w ten sposób.

0

po wywołaniu ncat -ul 8888 nie otrzymuje żadnego komunikatu zwrotnego. Wyłączyłem teraz wszystkie zapory i nie dało rady. A czy adres który wpisuje w #define SERWER_IP "192.168.17.128" to musi być adres wi-fi czy sam mogę sobie nadać z jakiegoś przedziału ?

0

Za pomocą komendy w terminalu
nc [ip] -p [port]
Podłączasz się jako client.

Spróbuj wysłać jakieś wiadomości, jeśli działa to znaczy , że problem jest po stronie telefonu , jeśli nie działa to postronie kodu w C

0

po wpisaniu ncat 192.168.17.128 -p 8888 mam connection refused

0
Azaks napisał(a):

po wywołaniu ncat -ul 8888 nie otrzymuje żadnego komunikatu zwrotnego. Wyłączyłem teraz wszystkie zapory i nie dało rady. A czy adres który wpisuje w #define SERWER_IP "192.168.17.128" to musi być adres wi-fi czy sam mogę sobie nadać z jakiegoś przedziału ?

W tym define wpisujesz ip serwera, którym ma być Twój komputer, więc po co Ci go zmieniać ?

0

Czyli ten adres IP , który tam nadałem zgodnie ze screenem z wirtualnej maszyny jest OK ?
A może mieć wpływ na to ,że w iwconfig nie pokazuje mi wlan0? Ale internet mi w wirtualnej maszynie normalnie działa po wifi.

0
Azaks napisał(a):

Czyli ten adres IP , który tam nadałem zgodnie ze screenem z wirtualnej maszyny jest OK ?

Aaaa widzisz to wirtualna maszyna! Jest ona ustawiona , żeby brała adres z "NAT" ?

0
PanRiK napisał(a):
Azaks napisał(a):

Czyli ten adres IP , który tam nadałem zgodnie ze screenem z wirtualnej maszyny jest OK ?

Aaaa widzisz to wirtualna maszyna! Jest ona ustawiona , żeby brała adres z "NAT" ?

Chciałbym Ci odpowiedzieć na to pytanie, ale nie wiem jak to sprawdzić :(

0

Ustawienia > Sieć > Podłączona do: (tutaj** musi** być bridged)
Dla: Oracle VM VirtualBox

0

title
Takie mam teraz ustawienia, ale w iwconfig nadal nie mam wlan0 , czy to problem ? I Ip w Networkach teraz mi się zmieniło na 192.168.0.17 , także zaaktualizowałem

0

Teraz to wygląda tak , że maszyna wirtualna korzysta z tej samej karty sieciowej co Twój rzeczywisty komputer. W ustawieniach możesz wybrać kartę sieciową jeśli masz więcej niż jedną

0

Jedną mam , czyli te ustawienia są poprawne ?

0
Azaks napisał(a):

Jedną mam , czyli te ustawienia są poprawne ?

Zniwelowałeś na pewno jeden z problemów :). Sprawdź czy kod działa będziemy dalej kombinować

0

title

Między dwoma terminalami komunikacja działa, czyli kod w porządku

@Edit
Dzięki!! :)
title

1 użytkowników online, w tym zalogowanych: 0, gości: 1