Tôi đang cố gắng chuyển ứng dụng dành cho máy tính để bàn của mình được viết bằng C và C++ sang nền tảng webassembly và đang điều tra xem có thể nào không. Một trong những điều quan trọng mà ứng dụng thực hiện là giao tiếp bằng cách gửi và nhận tin nhắn UDP. Tôi đã thực hiện tối thiểu UDP khách hàng mà chỉ tạo ra ổ cắm UDP và gửi các gói tin đến máy chủ (được xây dựng nguyên bản và đang chạy như thực thi riêng biệt tại cùng một máy). socket, bind và sendto API không trả về lỗi và mọi thứ có vẻ hoạt động nhưng không có thông điệp nào nhận được ở phía máy chủ và wireshark cho thấy không có hoạt động nào trên cổng đó.Ổ cắm UDP tại webassembly
Ổ cắm UDP chỉ được lưu trữ tại cổng webassembly libc hoặc được thực hiện trên một số kết nối chuẩn web (ví dụ: WebRTC)?
Mã khách hàng bên dưới. Tôi đã kiểm tra bản dựng gốc đang hoạt động đúng cách.
#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;
}
Tôi làm theo hướng dẫn từ http://webassembly.org/getting-started/developers-guide/ để xây dựng và chạy nó.
Cảm ơn trước vì bất kỳ trợ giúp hoặc đầu mối nào!
WetherWark Wethereshark có thể nắm bắt các gói trên giao diện loopback (tức là gửi gói đến cùng một máy) phụ thuộc vào nền tảng và lựa chọn giao diện gói sniffer của bạn. Trên Windows + winpcap, ví dụ, nó chỉ là không thể. Bạn đang sử dụng nền tảng nào? – tofro
Có, tôi đang sử dụng Windows và tôi sẽ thử đưa máy chủ vào máy an toàn hơn. Cảm ơn bạn! – roof
Tôi đã thử gửi gói đến máy chủ từ xa. Bây giờ wireshark cho thấy các gói tin gửi đi nếu tôi chạy ứng dụng khách được xây dựng nguyên bản và không hiển thị gì để xây dựng webassembly. – roof