Моя проблема в том, что я запрограммировал серверное / клиентское приложение на Windows.Теперь в режиме отладки все работает нормально и как надо, но в режиме выпуска сервер не принимает и не отправляет сообщения.
Я думаю, это связано с тем, что цикл for внутри бесконечного цикла for не доступен. Я также пытался реализовать это решение некоторое время, но оно не сработало.Я думаю, что может быть проблема в том, что я вызываю функцию в поле условия, потому что, когда я сравниваю i с целым числом, к нему получают доступ.Также интересно то, что когда я что-то std :: cout прямо перед внутренним циклом for, доступ к циклу также осуществляется, несмотря на то, что я вызываю функцию в поле условия.
#include <iostream>
#include <thread>
#include "server.cpp"
//gets defined in server.cpp
void server::acceptConn() {
u_long mode =1;
for(;;){
int len = sizeof(incAddr[connectedSocks]);
if((inc_sock[connectedSocks] = accept(serv,(struct sockaddr *)&incAddr[connectedSocks],&len))!= SOCKET_ERROR){
std::cout<<"client connected : "<<inet_ntoa(incAddr[connectedSocks].sin_addr)<<std::endl;
ioctlsocket(inc_sock[connectedSocks],FIONBIO,&mode);
connectedSocks++;
}
}
}
int main() {
server ser;
ser.init_Server();
std::thread t(&server::acceptConn,&ser);
char buf[1024];
for(;;){
for(int i=0 ; ser.getCounter()>i;i++){
if (recv(ser.getInc_Sock()[i], buf, sizeof(buf), 0) == SOCKET_ERROR) {
} else{
for (int x = 0; x < ser.getCounter(); x++) {
if(x==i){//just that the message doesnt get send back to the sender}
else{
if (send(ser.getInc_Sock()[x], buf, sizeof(buf), 0) == SOCKET_ERROR) {
std::cout<<"send failed : "<<WSAGetLastError()<<std::endl;
}
}
}
}
}
}
}
int getCounter(){return connectedSocks;};//in server.h
В результате сервер должен иметь список подключенных носков и рассылать сообщения всем.Теперь, когда я запускаю его в режиме отладки, все работает нормально.В чем может быть проблема?