在浏览器中通过 JavaScript 的 UDP 套接字
UDP socket via JavaScript in a browser
我可以在浏览器中通过 javascript 打开 UDP 套接字吗?
我知道 websocket 只使用 TCP,而在浏览器中唯一使用 UDP 的是 WebRTC。
还有其他办法吗?
我可以使用 WebAssembly 编译使用 UDP 套接字的 c++ 吗?
我尝试将此代码编译为 WebAssembly:
int main(int argc, char *argv[])
{
//initialize socket and structure
int socket_info;
struct sockaddr_in server;
char message[100];
char incoming_message[100];
printf("Input Message: ");
fgets(message, 100, stdin);
//create socket
socket_info = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_info == -1) {
printf("Could not create socket");
}
//assign local values
server.sin_addr.s_addr = inet_addr("172.21.8.178");
server.sin_family = AF_INET;
server.sin_port = htons( 1100 );
//binds connection
if (bind(socket_info, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror("Connection error");
return 1;
}
puts("Bind");
//assign new value to connect to
server.sin_addr.s_addr = inet_addr("192.118.68.1");
//checks connection
if (connect(socket_info, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror("Connection error");
return 1;
}
puts("Connected");
//sends message
if(send(socket_info, message, strlen(message), 0) <0) {
perror("Send failed");
return 1;
}
puts("Message Sent");
//receives message back
if(recv(socket_info, incoming_message, sizeof(incoming_message), 0) <0) {
puts("Received failed");
return 1;
}
puts("Message received");
puts(incoming_message);
close(socket_info);
}
运气不好。 :(
不,浏览器不支持 UDP。此外,WebAssembly 没有任何用于通信的 API - 要访问任何网络 API,您必须通过向 WebAssembly 模块公开 JavaScript 函数来实现。
我认为您唯一的选择是将您的 UDP 消息调整为 WebSocket。有商业产品可以做到这一点,例如 Kaazing 网关 (https://kaazing.com/),可能还有开源替代品。
我可以在浏览器中通过 javascript 打开 UDP 套接字吗?
我知道 websocket 只使用 TCP,而在浏览器中唯一使用 UDP 的是 WebRTC。
还有其他办法吗? 我可以使用 WebAssembly 编译使用 UDP 套接字的 c++ 吗?
我尝试将此代码编译为 WebAssembly:
int main(int argc, char *argv[])
{
//initialize socket and structure
int socket_info;
struct sockaddr_in server;
char message[100];
char incoming_message[100];
printf("Input Message: ");
fgets(message, 100, stdin);
//create socket
socket_info = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_info == -1) {
printf("Could not create socket");
}
//assign local values
server.sin_addr.s_addr = inet_addr("172.21.8.178");
server.sin_family = AF_INET;
server.sin_port = htons( 1100 );
//binds connection
if (bind(socket_info, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror("Connection error");
return 1;
}
puts("Bind");
//assign new value to connect to
server.sin_addr.s_addr = inet_addr("192.118.68.1");
//checks connection
if (connect(socket_info, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror("Connection error");
return 1;
}
puts("Connected");
//sends message
if(send(socket_info, message, strlen(message), 0) <0) {
perror("Send failed");
return 1;
}
puts("Message Sent");
//receives message back
if(recv(socket_info, incoming_message, sizeof(incoming_message), 0) <0) {
puts("Received failed");
return 1;
}
puts("Message received");
puts(incoming_message);
close(socket_info);
}
运气不好。 :(
不,浏览器不支持 UDP。此外,WebAssembly 没有任何用于通信的 API - 要访问任何网络 API,您必须通过向 WebAssembly 模块公开 JavaScript 函数来实现。
我认为您唯一的选择是将您的 UDP 消息调整为 WebSocket。有商业产品可以做到这一点,例如 Kaazing 网关 (https://kaazing.com/),可能还有开源替代品。