Próbuję przenieść moją aplikację komputerową napisaną w języku C i C++ na platformę webassembly i sprawdzam, czy jest ona w ogóle możliwa. Jedną z ważnych rzeczy, którą aplikacja obsługuje, jest wysyłanie i odbieranie wiadomości UDP. Zaimplementowałem minimalnego klienta UDP, który właśnie tworzy gniazdo UDP i wysyła pakiety na serwer (który jest wbudowany i działa jako oddzielny plik wykonywalny na tym samym komputerze). funkcje API socket, bind i sendto nie zwracają błędu i wszystko działa poprawnie, ale po stronie serwera nie są odbierane żadne wiadomości, a wireshark nie pokazuje żadnej aktywności na tym porcie.Gniazdo UDP w zespole internetowym
Czy gniazdo UDP jest tylko przygniecione do portu libc do tworzenia stron WWW, czy jest implementowane jako część standardowego połączenia internetowego (np. WebRTC)?
Kod klienta znajduje się poniżej. Sprawdziłem, czy natywna kompilacja działa poprawnie.
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#define BUFLEN 512
#define NPACK 100
#define PORT 9930
void diep(char *s)
{
perror(s);
exit(1);
}
#define SRV_IP "127.0.0.1"
int main(void)
{
struct sockaddr_in si_other;
int s, i, slen=sizeof(si_other);
char buf[BUFLEN];
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
diep("socket");
memset((char *) &si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(PORT);
if (inet_aton(SRV_IP, &si_other.sin_addr)==0) {
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
for (i=0; i<NPACK; i++) {
printf("Sending packet %d\n", i);
sprintf(buf, "This is packet %d\n", i);
if (sendto(s, buf, BUFLEN, 0, (struct sockaddr*)&si_other, slen)==-1)
diep("sendto()");
}
close(s);
return 0;
}
I przestrzegać instrukcji http://webassembly.org/getting-started/developers-guide/ zbudować i uruchomić go.
Z góry dziękuję za pomoc lub wskazówki!
Wether Wireshark jest w stanie przechwytywać pakiety w interfejsie sprzężenia zwrotnego (tj. Wysyłanie pakietów do tego samego komputera) w zależności od platformy i wyboru interfejsu sniffera pakietów. Na przykład na Windows + winpcap, to po prostu niemożliwe. Na jakiej jesteś platformie? – tofro
Tak, pracuję w systemie Windows i spróbuję umieścić serwer na innej maszynie. Dziękuję Ci! – roof
Próbowałem wysłać pakiety do zdalnego hosta. Teraz wireshark pokazuje pakiety wychodzące, jeśli uruchomię natywnie wbudowaną aplikację kliencką i nic nie wyświetli dla kompilacji webassembly. – roof