基于AZURE的客户端 - 服务器应用程序

时间:2018-03-06 10:05:16

标签: azure sockets networking client-server

我有一个简单的客户端 - 服务器(主从)UDP应用程序,它可以在本地计算机上以及两台不同的计算机之间运行。即我可以从客户端发送数据并在服务器上接收它。

我的下一步是在AZURE上的VM上运行客户端,并从AZURE VM上的服务器(即Master或我的PC)读取数据。为此,我在AZURE上运行客户端并为其提供本地计算机的IP地址,即本例中的Master。但不知怎的,没有沟通。

我担心防火墙会阻止某些功能。我还在AZURE上打开了端口53(用于UDP),并尝试在此端口上绑定套接字,但这也无济于事。

以下是我的服务器端的代码,它在我的PC上本地运行:

void main( ){

//WinSock_Init();

WSADATA data;
WORD version = MAKEWORD(2,2);
int wsok = WSAStartup(version, &data);
if(wsok != 0)
{
    cout<< "cant start Winsock!"<<wsok<<endl;
    //return;
}


SOCKET in = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in server;
server.sin_addr.S_un.S_addr = ADDR_ANY ;
server.sin_family = AF_INET;
server.sin_port = htons (54000);

if (bind(in, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR){

    cout << "cant bind the socket!"<<WSAGetLastError<<endl;
}

sockaddr_in client;
int clientLength = sizeof(client);
ZeroMemory(&client,clientLength);

char buffer[1024];



 while (1)
{
    ZeroMemory(buffer,1024);
    int bytesIN = recvfrom(in,buffer,1024,0,(sockaddr*)&client,&clientLength);

    if(bytesIN == SOCKET_ERROR){

        cout << "error receiving from client"<<WSAGetLastError()<<endl;
        continue;
    }

    // Display message and client info

    char clientIP[256];
    ZeroMemory(clientIP, 256);

    inet_ntop(AF_INET, &client.sin_addr, clientIP,256);

    cout<<"Received message from "<<clientIP<<" : "<<buffer<<endl;

}

closesocket(in);

WSACleanup();}

这是客户端代码,其中包含本地计算机的IP地址,即“10.19.206.13”:

void main(int argc,char* argv[] ){

//WinSock_Init();

WSADATA data;
WORD version = MAKEWORD(2,2);
int wsok = WSAStartup(version, &data);
if(wsok != 0)
{
    cout<< "cant start Winsock!"<<wsok<<endl;
    return;
}
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(54000);
inet_pton(AF_INET, "10.19.206.13", &server.sin_addr);

SOCKET out = socket(AF_INET, SOCK_DGRAM, 0);

string s(argv[1]);
int sendok = sendto(out, s.c_str(), s.size() + 1,0, (sockaddr*) &server, sizeof(server));

if (sendok == SOCKET_ERROR)

{
    cout<<"that didnt work"<<WSAGetLastError()<<endl;
}

closesocket(out);

WSACleanup();}

这是我的AZURE VM上的当前入站规则,我已经允许端口53上的流量,即UDP。

  

注意:我还尝试在客户端和服务器端绑定端口53上的套接字,但它没有帮助。我是否需要在本地PC的防火墙中进行一些更改?我知道我错过了一些基本的但是无法让它运行。

enter image description here

0 个答案:

没有答案