我有一个简单的客户端 - 服务器(主从)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的防火墙中进行一些更改?我知道我错过了一些基本的但是无法让它运行。