0

私はクライアント サーバー プログラムを持っていて、サーバーをサービスに変更したいと考えていました。だから私はここSvp.cppからいくつかのコードを取りました。正常に動作しますが、UDP を使用してクライアント サーバーを作成したので、サービスにメッセージを送信する別の方法があるのではないかと考えていました。クライアントはサーバー(サービス)にメッセージを送信し、サーバーはそれらをエコーバックするだけです。メッセージの送受信に UDP または TCP 接続が必要ですか?

クライアントからメッセージを受信するプログラムの一部を次に示します (残りのコードは Svp.cpp から取得します)。

SOCKET socketS;

InitWinsock();
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen = sizeof(from);
local.sin_family = AF_INET;
local.sin_port = htons(1234);
local.sin_addr.s_addr = INADDR_ANY;

socketS = socket(AF_INET,SOCK_DGRAM,0);
bind(socketS,(sockaddr*)&local,sizeof(local));
while (1)
{
    char buffer[1024];
    ZeroMemory(buffer, sizeof(buffer));
    if (recvfrom(socketS,buffer,sizeof(buffer),0,(sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
    {
        sendto(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, fromlen);
    }
}
closesocket(socketS);
4

1 に答える 1

0

クライアント アプリケーションとサーバー アプリケーションが同じマシン上にある場合は、代わりに名前付きパイプを使用できます。

名前付きパイプ

UI を削除しなければならないシステム サービスがあり、UI とサービスの間で通信するためのソケットを作成する代わりに、名前付きパイプを使用しました。一部のクライアントは、マシンでリッスンしている TCP ソケットが開いているため、セキュリティを心配していたので、これは良かったです。

このルートに進む場合、パイプはソケットのように読み取り/書き込みを通知しないため、2 つのアプリケーション間で何らかのシグナリングをセットアップする必要があります。しかし、これは非常に実行可能なソリューションです。

于 2013-03-27T14:09:41.427 に答える