2017-07-18 18 views
0

C++クライアントとnode.jsサーバーの間で通信しようとしています。私はサーバーにデータを送ることができますが、クライアントにメッセージを返すことはできません。 socket.emitの簡単な理解は、基本ウィンドウのメッセージループでFD_READメッセージでrecv()を呼び出すことによって取得できるメッセージを送信する必要があるということです。私はそこに何か不足しているかもしれない。ここでNode.jsからC++へのクライアント:socket.emitからのメッセージを受信しません。

は、関連するクライアントコードです:

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
if (s == INVALID_SOCKET) 
{ 
    MessageBox(hwnd, TEXT("3"), TEXT(""), MB_OK | MB_ICONEXCLAMATION); 
    return 0; 
} 

long hostname = inet_addr("192.168.1.70"); 
target.sin_family = AF_INET; 
target.sin_port = htons(server_port_num); 
target.sin_addr.s_addr = hostname; 

if (connect(s, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR) 
{ 
    MessageBox(hwnd, TEXT("999"), TEXT(""), MB_OK | MB_ICONEXCLAMATION); 
    return 0; 
} 

WSAAsyncSelect(s, hwnd, CUST_MSG, FD_READ | FD_CONNECT | FD_CLOSE); 

私は、サーバーのコンソール上で受信して出力されるデータを、送信:

int nret = send(s, buffer, strlen(buffer), 0); 

その後、私は戻って、同じサーバ内のいくつかのデータを送信しようデータを受け取るイベント:

this.socket.on('data', function (buffer) { 
    try { 
     logger.warn(buffer + "\n"); 
     socket.emit('message', 'psst, wanna buy some macaroni?'); 
     //that.messageHandler(that, buffer); 
    } catch (err) { 
     logger.warn('Protocol ' + err + ' ' + that.socket.remoteAddress); 
     that.dispose(); 
    } 
}); 

私はメッセージループを持っていますが、それは混乱を検出しませんsocket.emitから送信された年齢():私はプログラムを少し変更して、クライアントからクライアントへデータを送信するとき

MSG msg; 
while (GetMessage(&msg, NULL, 0, 0) > 0) 
{ 
    if (numBytes > 0) { 
     wchar_t buffer[256]; 
     wsprintfW(buffer, L"%d", numBytes); 
     MessageBox(hwnd, buffer, TEXT(""), MB_OK | MB_ICONEXCLAMATION); 
    } 

    TranslateMessage(&msg); 
    DispatchMessage(&msg); 

} 

//MESSAGE LOOP FUNCTION: 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
switch (message) //handle the messages 
{ 
case CUST_MSG: //Is a message being sent? 
{ 
    switch (lParam) //If so, which one is it? 
    { 
    case FD_ACCEPT: 
     MessageBox(hwnd, TEXT("accept"), TEXT(""), MB_OK | MB_ICONEXCLAMATION); 
     accept(wParam, NULL, NULL); 
     break; 
    case FD_CONNECT: 
     MessageBox(hwnd, TEXT("connect"), TEXT(""), MB_OK | MB_ICONEXCLAMATION); 
     break; 
    case FD_READ: 
     char buffer[80]; 
     int byte_num; 
     memset(buffer, 0, sizeof(buffer)); 
     byte_num = recv(wParam, buffer, sizeof(buffer) - 1, 0); 
     MessageBox(hwnd, TEXT("READING"), TEXT(""), MB_OK | MB_ICONEXCLAMATION); 

     numBytes += byte_num; 
     break; 
    case FD_CLOSE: 
     //MessageBox(hwnd, TEXT("close"), TEXT(""), MB_OK | MB_ICONEXCLAMATION); 
     break; 
    } 
} 

同じループがメッセージを正しく検出します。私はbind()、listen()、recv()を使いこなそうとしましたが、nodeを使ってFD_READメッセージを受け取ることはできません。私は、クライアントと同じコンピュータ上で実行されているサーバーと、同じローカルネットワーク上の異なるコンピュータを試しました。

答えて

関連する問題