我有一个解码ADS-B消息(来自平面)的软件,并以十六进制形式将结果发送到端口(47806)。
我想听这个端口显示数据,所以我写了这个:
WSADATA WSAData;
WSAStartup(MAKEWORD(2, 0), & WSAData);
SOCKET sock;
SOCKADDR_IN socket_in;
socket_in.sin_addr.s_addr = htonl(INADDR_ANY);
socket_in.sin_family = AF_INET;
socket_in.sin_port = htons(47806);
sock = socket(AF_INET, SOCK_STREAM, 0);
bind(sock, (SOCKADDR*)& socket_in, sizeof(socket_in));
listen(sock, 0);
int valid = 0;
while (TRUE) {
int size_socket_in = sizeof(socket_in);
valid = accept(sock, (SOCKADDR*)& socket_in, & size_socket_in);
if (valid != INVALID_SOCKET) {
std::cout << "OK";
}
}
此代码应显示&#34; OK&#34;每次收到一条消息,但它没有。 我可以使用Telnet软件读取数据,例如PuTTY: PuTTY telnet on port 47806
我不明白为什么我的代码无效。
答案 0 :(得分:2)
这是正确的代码:
WSADATA WSAData;
WSAStartup(MAKEWORD(2, 0), & WSAData);
SOCKET sock;
SOCKADDR_IN socket_in;
InetPton(AF_INET, "127.0.0.1", & socket_in.sin_addr.s_addr);
socket_in.sin_family = AF_INET;
socket_in.sin_port = htons(47806);
sock = socket(AF_INET, SOCK_STREAM, 0);
connect(sock, (SOCKADDR*)& socket_in, sizeof(socket_in));
int valid = 0;
char buffer[512] = "";
while (TRUE) {
valid = recv(sock, buffer, sizeof(buffer), 0);
if (valid != INVALID_SOCKET) {
std::cout << buffer;
}
}
我的程序是客户端,而不是服务器。因此,我必须使用InetPton
定义IP地址,使用connect
连接到服务器,并使用recv
接收消息。
感谢@Hasturkun和@RustyX寻求帮助和解释。