2017-06-29 25 views
6

मैं अपने डेस्कटॉप ऐप को सी और सी ++ में वेबसाइब्स प्लेटफॉर्म पर पोर्ट करने की कोशिश कर रहा हूं और यदि यह संभव हो तो जांच कर रहा हूं। ऐप करता है महत्वपूर्ण चीजों में से एक यूडीपी संदेशों को भेज और प्राप्त करके संवाद करता है। मैंने न्यूनतम यूडीपी क्लाइंट लागू किया है जो यूडीपी सॉकेट बनाता है और सर्वर पर पैकेट भेजता है (जो मूल रूप से निर्मित होता है और उसी मशीन पर अलग निष्पादन योग्य के रूप में चल रहा है)। सॉकेट, बाइंड और एपीआई भेजने के लिए कोई त्रुटि नहीं आती है और सबकुछ काम करता दिखता है लेकिन सर्वर की तरफ कोई संदेश नहीं मिल रहा है और वायरसहार्क उस बंदरगाह पर कोई गतिविधि नहीं दिखाता है।वेबसाइब्स पर यूडीपी सॉकेट

क्या यूडीपी सॉकेट वेबसाइब्स libc पोर्ट पर बस stubbed है, या यह कुछ वेब मानक कनेक्शन (जैसे वेबआरटीसी) के शीर्ष पर लागू किया गया है?

ग्राहक कोड नीचे है। मैंने जांच की कि मूल निर्माण ठीक से काम कर रहा है।

#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; 
} 

मैं का निर्माण और इसे चलाने के लिए http://webassembly.org/getting-started/developers-guide/ से निर्देशों का पालन किया।

किसी भी मदद या सुराग के लिए अग्रिम धन्यवाद!

+0

गीलेर वायरशर्क लूपबैक इंटरफ़ेस पर पैकेट कैप्चर करने में सक्षम है (यानी एक ही मशीन पर पैकेट भेजना) प्लेटफार्म और पैकेट स्निफर इंटरफ़ेस के आपके चयन पर निर्भर करता है। विंडोज + winpcap पर, उदाहरण के लिए, यह संभव नहीं है। आप किस मंच पर हैं? – tofro

+0

हां, मैं विंडोज़ पर हूं, और मैं सर्वर को मशीन बनाने की कोशिश करूंगा। धन्यवाद! – roof

+0

मैंने दूरस्थ होस्ट को पैकेट भेजने की कोशिश की है। अब वायरसहार्क आउटगोइंग पैकेट दिखाता है यदि मैं मूल रूप से निर्मित क्लाइंट ऐप चलाता हूं और वेबसाइब्स बिल्ड के लिए कुछ भी नहीं दिखाता है। – roof

उत्तर

0

मुझे पता चला कि कैसे वेबसाइकिलों पर यूडीपी सॉकेट लागू किए जाते हैं। दरअसल, वे websockets द्वारा नकल कर रहे हैं। यह संभवतः काम करेगा यदि क्लाइंट और सर्वर दोनों वेबसाइंबली थे, लेकिन मेरा सर्वर मूल रूप से बनाया गया है। Wasm गतिशील जोड़ने का समर्थन नहीं करता है, (libc कार्यान्वयन सहित) सभी कोड एक जे एस फ़ाइल के लिए आ जाते हैं, थे हम यूडीपी sendto कार्यान्वयन पा सकते हैं:

// if we're emulating a connection-less dgram socket and don't have 
     // a cached connection, queue the buffer to send upon connect and 
     // lie, saying the data was sent now. 
     if (sock.type === 2) { 
     if (!dest || dest.socket.readyState !== dest.socket.OPEN) { 
      // if we're not connected, open a new connection 
      if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { 
      dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); 
      } 
      dest.dgram_send_queue.push(data); 
      return length; 
     } 
     } 
0

कोई भी चीज जो ब्राउज़र में चलाता है आप देशी नहीं देंगे सॉकेट एक्सेस और मुझे संदेह है कि ब्राउज़र विक्रेता इस तरह की किसी भी पहुंच पर दृढ़ता से ऑब्जेक्ट करेंगे क्योंकि यह एक संभावित सुरक्षा उल्लंघन है।

शायद अधिक से अधिक मूल अनुप्रयोग वेब पर जाते हैं क्योंकि प्रदर्शन अंतर अंतर वेबसाइक्लिंग के कारण घटता है और इसी तरह की पहलों से उन्हें अपना रुख बदल जाएगा, लेकिन तब तक, जो कुछ भी सीधे सॉकेट नियंत्रण चाहता है उसे मूल ऐप रखना होगा ।

+0

खैर, मुझे उम्मीद थी कि वेबआरटीसी के शीर्ष पर या यहां तक ​​कि [डब्ल्यू 3 सी ड्राफ्ट] (https://www.w3.org/TR/tcp-udp-sockets) के प्रयोगात्मक समर्थन के शीर्ष पर कुछ चालाक यूडीपी सॉकेट कार्यान्वयन है। – roof

+0

आपको लगता है कि वे यूडीपी तक कुछ पहुंच देंगे क्योंकि यह रीयलटाइम ऑडियो जैसी कुछ चीजों के लिए उपयोगी है: \ – rogerdpack

+0

@AdnanY: देशी क्लाइंट ऐप्स को जावास्क्रिप्ट एप्लिकेशन के समान तरीके से लॉन्च किया जा सकता है और उन्होंने कच्चे सॉकेट प्रदान किए हैं। – user2284570

संबंधित मुद्दे