labelRicevuti.text = [[NSString alloc] initWithFormat:@"In attesa di ricevere i dati"];
Эта строка пропускает выделенную вами строку, если labelRicevuti не является обычной структурой C.
char datiRicevuti[500];
int ricevuti;
//while(1){
ricevuti = recv(new_sd, &datiRicevuti, 500, 0);
Вы никогда не проверяете ricevuti, чтобы узнать, равен ли он -1 здесь.
labelRicevuti.text = [[NSString alloc] initWithFormat:@"%s", datiRicevuti];
Эта строка, вероятно, содержит ошибки, потому что datiRicevuti почти наверняка не является последовательностью символов с нулевым символом в конце. Во-первых, вы никогда не обнуляете буфер перед его использованием. Во-вторых, вы позволяете recv заполнять его полностью, если в нем доступно 500 или более байтов, так что нет места для завершающего nul.
Кроме того, вы пропускаете выделенную строку, если только labelRicevuti не является обычной структурой C, в этом случае вы пропускаете строку, выделенную в предыдущей итерации, или строку в верхней части функции.