【发布时间】:2017-11-01 20:42:29
【问题描述】:
我正在尝试通过 TCP 套接字相互连接进程。当两个进程都在本地运行时,我已经成功地做到了这一点,方法是在客户端(python 进程):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 11111))
服务器端是别人写的,用C++实现的。
#define WIDTH 640
#define HEIGHT 480
#define DEPTH 3
#define BUFS (WIDTH*HEIGHT*DEPTH)
int sockfd, newsockfd, portno;
struct sockaddr_in serv_addr, cli_addr;
socklen_t clilen;
void netx_setup()
{
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = 11111;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);
clilen = sizeof(cli_addr);
std::cout<<"Waiting for connection\n";
newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr,
&clilen);
if (newsockfd < 0)
{
std::cout<<"No connection!\n";
newsockfd=0;
}
}
但是,我现在需要让服务器进程在我的本地计算机上运行,而客户端在 Microsoft Azure VM 实例上运行。建立连接后,我已经准备好所有必要的代码来处理所有事情,但是我不确定如何为此设置套接字。任何帮助将不胜感激!
【问题讨论】:
-
服务器看起来应该可以正常工作。只需将
"localhost"替换为客户端代码中的 Azure 主机地址即可。您可能需要在服务器上配置防火墙以允许远程连接,但如何做到这一点似乎更像是一个SuperUser 问题。 -
那么您具体要问什么?
-
@JesperJuhl 我需要将客户端进程移动到 Azure VM。在这样做时,我相信我需要修改客户端进程代码,以便它仍然可以找到 C++ 服务器。我正在寻求有关修改客户端连接的指导。根据 Miles 的建议,我已将“localhost”更改为我的 VM 实例的 IP 地址,并通过我的端口启用了入站/出站流量,但连接仍然失败。
标签: python c++ sockets azure tcp