0
Я хочу создать RCON-отправителя на C++ для многопользовательской игры Jedi Academy. Все работает нормально, только проблема в том, что, когда я читал recv()
с сервера, заказ иногда не является подлинным!Ошибка C++ Socket recv()
std::vector<std::string> ReceiveLine() {
std::vector<std::string> ret;
char* r = new char[1024];
int i = 0;
while (i < 40) {
for(unsigned int j=0; j<1024; ++j) r[j]=0;
if (recv(s_, r, 1024, 0) <= 12) {
break;
}
ret.push_back(r+10);
++i;
}
return ret;
}
Он печатает так:
map: mp/ffa3
num score ping name lastmsg address qport rate
4 0 0 Alora 33 bot 6145 16384
5 0 0 Alora 33 bot 22058 16384
6 0 0 Alora 33 bot 60636 16384
7 0 0 Alora 33 bot 18312 16384
8 0 0 Alora 33 bot 11812 16384
--- ----- ---- --------------- ------- --------------------- ----- -----
0 0 22 test 0 XX.XX.XXX.XXX:29070 65099 25000
1 0 0 Alora 33 bot 9234 16384
9 0 0 Alora 33 bot 27681 16384
10 0 0 Alora 33 bot 19116 16384
11 0 0 Alora 33 bot 3514 16384
2 1 0 Alora 33 bot 65099 16384
12 0 0 Alora 33 bot 5972 16384
3 0 0 Alora 33 bot 41129 16384
13 0 0 Alora 33 bot 30716 16384
Это должно быть в порядке NUM (работает в PHP)
Как PHP может привести к его упорядочению? – Iburidu
Хотя это правда, и вам нужно справиться с этой ситуацией, я бы не ожидал, что они будут так плохо выведены из строя повторяющимся образом. Я подозреваю, что что-то еще не так, но не могу сказать из этого фрагмента кода. Являются ли пакеты вы возвращаете строки с нулевым завершением? Возможно ли, что вы смешиваете два разных потока? – mark
да, это должно быть завершено нулем :) каждая строка выглядит как '\ xFF \ xFF \ xFF \ xFFprint [SOMETHING] \ n', а null до 1024. Socket:' s_ = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP) ; ' ' sockaddr_in addr; '' addr.sin_family = AF_INET; '' addr.sin_port = htons (port); '' addr.sin_addr = * ((in_addr *) he-> h_addr); 'memset (& addr.sin_zero), 0, 8); 'И connect:' :: connect (s_, (sockaddr *) & addr, sizeof (sockaddr)) 'Я использую только этот, так что я уверен, конфликтов нет , если вы имеете в виду это :) – Iburidu