2

MFC / C ++ソケットプログラミングのコードを使用しましたが、サーバーとクライアントを同じPCで作成した場合にのみ機能しますが、クライアントを別のPCで使用すると、サーバーが見つからず、接続に失敗します。使用しているサーバーのローカルIPに問題があるのか​​、コードに問題があるのか​​わかりません:)!

次のコードはサーバー側です:-

#include <afx.h>
#include <afxext.h>
#include <afxsock.h>
#include <iostream>

using namespace std;

int main() 
{
    AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0);
    AfxSocketInit();
    CSocket serverSocket;
    serverSocket.Create(3333);
    serverSocket.Listen();
    CSocket clientSocket;

    while(serverSocket.Accept(clientSocket))
    {
        CString s;

        while(s!="bye")
        {
            char msg[128];

            if(clientSocket.Receive(msg, 128)<0)break;

            s = msg;
            cout<<"Client: "<<msg<<endl;
            sprintf_s(msg, 128, "Your msg (%d letter) arrived successfully.",
            strlen(msg));
            clientSocket.Send(msg, 128);

            if(s=="shutdown")exit(0);
        }

        clientSocket.Close();
    }

    return 0;
}

クライアント側の次のコード:-

 #include <afx.h>
 #include <afxext.h>
 #include <afxsock.h>
 #include <iostream>

 using namespace std;

int main()
{
    AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0);
    AfxSocketInit();
    CSocket clientSocket;
    clientSocket.Create();

    if(clientSocket.Connect("192.168.1.2", 3333))
    {
        cout<<"Connected to server."<<endl;
        CString s;

        while(s!="bye" && s!="shutdown")
        {
            char msg[128];
            cin.getline(msg, 128);
            s = msg;
            clientSocket.Send(msg, 128);

            if(clientSocket.Receive(msg, 128)<0)break;

            cout<<msg<<endl;
        }
    }
    else
    {
       cout<<"Cannot find server."<<endl;
    }

    return 0;
}
4

2 に答える 2

1

現在固定されているアドレスでは なく、クライアント内の別のサーバーアドレスに接続してみてはどうでしょうか。

if(clientSocket.Connect("192.168.1.2", 3333))

PSアドレスやポート番号などのパラメータをプログラムに設定するのが常に最善です。

于 2012-12-14T17:21:48.307 に答える