2012-12-14 101 views
2

我使用了MFC/C++套接字编程的代码,但它只在使服务器和客户端在同一台PC上工作,但是当我在不同的PC上使用客户端时,它无法找到服务器并且连接失败。 我不知道是否与我使用的服务器本地IP的问题或与代码的任何帮助,请:))!“MFC/C++ Socket编程..”如何连接服务器和客户端?

下面的代码是服务器端: -

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

先尝试从客户端PC ping“服务器PC”。 – Stan

回答

1

如何尝试连接到另一台服务器的地址在客户端,而不是你目前的固定地址?

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

P.S.它始终是最好设定在你的程序参数,这样的事情地址和端口号..

+0

我该怎么做? – Kakashi

+0

当我用这个IP“41.47.9.91”,它dos't连接,是否有这个IP的问题? – Kakashi

+0

“41.47.9.91”是公共互联网地址。您的客户端计算机是否可以访问互联网?客户端计算机和互联网之间以及“41.47.9.91”计算机和互联网之间是否有防火墙? –

1

绑定服务器套接字第一

serverSocket.Bind(3333) 

,然后听。

相关问题