Добрый день. В настоящий момент пытаюсь реализовать работу с FAST протоколом. MOEX открыл доступ для моего ip к тестовому контуру. Как и требуется я подключился по заданному ip через VPN соединение. Подключение работает, байты приходят. Далее я пытаюсь читать UDP пакеты уже своим приложением. Все по стандарту, создал сокет (UDP), подключился, и пытаюсь читать входящие сообщения функцией recvfrom. Однако, ничего на порт не приходит. Порты пробовал разные (1723, 8080, 16105 и т.п.). В сетевом программировании я варюсь не больше месяца, поэтому прошу помочь людей, которые уже проходили подобное. Код прикладываю.
Установка соединения (тут вроде все ок, работает)
bool SClient::Connect(){ // Init WinSock WSAData data; WSAStartup( MAKEWORD(2, 2), &data); memset(&c_sock, 0, sizeof(c_sock)); memset(&c_addr, 0, sizeof(c_addr)); memset(&sender, 0, sizeof(c_addr)); senderAddrSize = sizeof(sender); //create socket c_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); c_addr.sin_family = AF_INET; c_addr.sin_port = htons(port_); c_addr.sin_addr.s_addr = htonl(INADDR_ANY); //c_addr.sin_addr.s_addr = inet_addr(ip_); if (bind(c_sock, (sockaddr *) &c_addr, sizeof(c_addr))) { printf("Error bind %d\n", WSAGetLastError()); close(c_sock); WSACleanup(); return false; } return true; }
Попытка чтения сообщений приходящих на сокет (тут все зависает на функции recvfrom)
while(true) { int res=recvfrom(client.c_sock, (char*)buf, sizeof(buf), 0, (SOCKADDR *)& client.sender, &client.senderAddrSize); printf("Error recvfrom %d\n", WSAGetLastError()); seq = *(UINT32*)buf; printf("%12s:seq=%6d:len=%4d\n", inet_ntoa(client.sender.sin_addr), seq, res); }