【发布时间】:2015-04-16 04:14:06
【问题描述】:
我在 www.pythonanywhere.com 上有免费帐户。我有一个用 C++ 编写的服务器
some_space::socket_server::socket_server(unsigned int port):
m_port(port),
m_tcp_fd(0),
m_udp_fd(0),
m_newfd(0)
{
m_addr.sin_family = AF_INET;
m_addr.sin_addr.s_addr = htonl(INADDR_ANY);
m_addr.sin_port = htons(m_port);
}
void some_space::socket_server::set_port(unsigned int port)
{
assert(port != 0);
m_port = port;
}
int some_space::socket_server::create_tcp_connection()
{
m_tcp_fd = socket(AF_INET, SOCK_STREAM, 0);
if(m_tcp_fd < 0) {
perror("Error: Cannot set up the communication");
return -1;
}
int status = bind(m_tcp_fd, (struct sockaddr *)&m_addr, sizeof(m_addr)); if(status < 0) {
perror("Error: Cannot set up the communication");
return -1;
}
status = listen(m_tcp_fd, 5);
if(status == 0) {
m_newfd = accept(m_tcp_fd, (struct sockaddr*)NULL, NULL);// ####################### The code freezes here (on the accept)
if(m_newfd != -1) {
return m_newfd;
}
perror("Error: Cannot accept the connection");
return -1;
}
perror("Error: The port cannot be listened");
return -1;
}
在哪里m_port = 9999
此 cod 在 .pythonanywhere.com 服务器终端上运行。
主要是。
some_space::socket_server* s = new some_space::socket_server(9999);
assert(s != 0);
int r = s->create_tcp_connection(); // it it freezes in this function
assert(r != -1);
std::string rsp("");
s->recv_response(rsp);
std::string rec("some data");
const char* t = rec.c_str();
char* buf = const_cast<char*>(t);
int size = rec.length();
r = s->send_data(buf, size);
assert(r != -1);*/
.......................
另外,我在本地电脑上有一个用 python 编写的客户端程序。
#!/usr/bin/env python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('<username>.pythonanywhere.com', 9999))
sock.send('hello, world!')
data = sock.recv(1024)
print "receive >>> %s" % data
sock.close()
但问题是客户端无法与服务器连接,它总是在等待。哪里出了问题?
【问题讨论】:
-
系统调用的调试和检查返回告诉你什么?
-
在所有地方,我都有“断言”,所以问题不在于返回值不正确
-
因此,如果您的服务器甚至没有响应客户端的连接尝试,则很可能该尝试没有通过。也就是说,您的问题是“在网络设置中”。检查客户端和服务器的防火墙设置。使用其他工具(例如
nmap)检查您的服务器实际上是否可以从外部访问。如果您的客户端请求通过网络,请与其他服务器核实。这些是您缩小问题范围的第一步。 -
Jan-Philip Gehrcke - 感谢您的富有成效的评论。几分钟前,我读到 www.pythonanywhere.com 没有开放端口。还有nmap日志,根据“不支持'AF_INET (tcp) on this system”。
标签: python c++ sockets web client-server