2016-09-11 1 views
0

Wenn ich versuche, einige grundlegende UDP-Nachricht zu senden, sieht es so aus, als würde es nicht senden. Ich habe versucht, ein paar Beispiele zu finden, die ich online gefunden habe. Ich verwende SocketTest v3.0.0 zum Testen von Server/Client. Als ich getestet TCP funktioniert alles wie erwartet funktioniert, aber ich UDP Fall es einfach nicht.Libuv UDP Basic senden

Können Sie ein wirklich einfaches UDP-Sendecode-Snippet bereitstellen? Zum Beispiel wird der Empfänger auf localhost sein und die Nachricht wird "test" enthalten und es wird eine feste Länge sein?

Und ich habe noch eine kleine Frage. Es ich die Nachricht auf dem lokalen Host senden kann die Anwendung (Server) selbst erhalten und denken, dass jemand anderes es gesendet hat (verursacht Schleifen), weil es keine Verbindung zu einigen Peer es nur senden Sie die Nachricht und hören auf demselben IP-Port?

Thanks :)

+0

Können Sie das näher erläutern, was nicht funktioniert? Welchen Code hast du probiert? [Dieser Test] (https://github.com/libuv/libuv/blob/v1.x/test/test-udp-send-and-recv.c) sollte Ihnen den Einstieg erleichtern. – saghul

+0

Danke, ich habe ein paar Beispiele ausprobiert. Beim Senden gibt es '0' zurück, also sollte es gesendet werden, aber es wird keine Nachricht empfangen. Ich werde diese Tests versuchen. Die Firewall sollte die Nachrichten nicht blockieren, oder? –

+0

uv_udp_send zurückgeben 0 wird nicht die Nachricht empfangen, was sagt der Status des on_recv Callbacks? Viele Unternehmensfirewalls können UDP-Datenverkehr blockieren, haben Sie localhost versucht, nur um sicher zu gehen? – saghul

Antwort

1

Sie haben eine Menge nützlicher Beispiele hier: https://nikhilm.github.io/uvbook/networking.html

uv_loop_t *loop; 
uv_udp_t send_socket; 
uv_udp_t recv_socket; 

int main() { 
    loop = uv_default_loop(); 

    uv_udp_init(loop, &recv_socket); 
    struct sockaddr_in recv_addr; 
    uv_ip4_addr("0.0.0.0", 68, &recv_addr); 
    uv_udp_bind(&recv_socket, (const struct sockaddr *)&recv_addr, UV_UDP_REUSEADDR); 
    uv_udp_recv_start(&recv_socket, alloc_buffer, on_read); 

    uv_udp_init(loop, &send_socket); 
    struct sockaddr_in broadcast_addr; 
    uv_ip4_addr("0.0.0.0", 0, &broadcast_addr); 
    uv_udp_bind(&send_socket, (const struct sockaddr *)&broadcast_addr, 0); 
    uv_udp_set_broadcast(&send_socket, 1); 

    uv_udp_send_t send_req; 
    uv_buf_t discover_msg = make_discover_msg(); 

    struct sockaddr_in send_addr; 
    uv_ip4_addr("255.255.255.255", 67, &send_addr); 
    uv_udp_send(&send_req, &send_socket, &discover_msg, 1, (const struct sockaddr *)&send_addr, on_send); 

    return uv_run(loop, UV_RUN_DEFAULT); 
}