VirtualWire - problem sending/recieving

I'm trying to make some experiments with RF communication. I've a client and a server (very similar to the library examples):
Client:

#include <VirtualWire.h>
//CLIENT
void setup(){
  pinMode(13,OUTPUT);
  Serial.begin(9600);
  vw_setup(2000);
  vw_rx_start();
}

void loop(){
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  
  vw_send((uint8_t *)"Do",2);
  vw_wait_tx();
  if(vw_get_message(buf,&buflen)){
    digitalWrite(13,digitalRead(13)==HIGH?LOW:HIGH);  //toggle led 13
  }
}

Server:

#include <VirtualWire.h>
//SERVER
void setup(){
  pinMode(13,OUTPUT);
  vw_setup(2000);
  vw_rx_start();
}

void loop(){
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  
  if(vw_get_message(buf,&buflen)){
    digitalWrite(13,digitalRead(13)==HIGH?LOW:HIGH);  //toggle led 13
    vw_send((uint8_t *)"Done", 4);
    vw_wait_tx();
  }
}

The client is supposed to send a command "Do" to the server witch toggle the LED and send a reply "Done" to the Client witch toggle its own LED.
The Server's LED is blinking so the client correctly send the message and the server recieve it.
But the Client's LED doesn't, So either the client can't recieve or the server can't send.

I'm sure that RF modules works because I tried the library example (transmit / reciever) switching my two boards and it works fine.

I know that RF transciever has an antenna switching time to switch from transmit mode to recieve mode and vice versa. But I inserted some delay and it still doesn't working.

I'm using two Arduino Uno and two aurel transciever modules: RTF-DATA-SAW 433MHz (futuraelettronica.net)

P.S. sorry for my poor english :blush:

I noticed that client software can't work like this (vw_get_message is non-bloking) so I edited it like this:

void setup(){
  pinMode(13,OUTPUT);
  Serial.begin(9600);
  vw_setup(2000);
  vw_rx_start();
  vw_send((uint8_t *)"Do",2);
  vw_wait_tx();
}

void loop(){
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  
if (vw_wait_rx_max(500)){
  if(vw_get_message(buf,&buflen)){
    digitalWrite(13,digitalRead(13)==HIGH?LOW:HIGH);  //toggle led 13
    vw_send((uint8_t *)"Do",2);
    vw_wait_tx();
  }
}else{
  vw_send((uint8_t *)"Do",2);
  vw_wait_tx();
}
}

but it still doesn't work =(

I used a LED as a probe and I saw that Server is working properly (after recieving sends some data) but the Client doesn't recieve anything

Are you opposed to Serial.begin() and Serial.print() for debugging for some reason?

I just wanted to see a blinking led because one of the board is not plugged to a PC so i can't use serial, and i made software as simple as possibile due to avoid timing problems, But i think it doesn't change so much.

I just wanted to see a blinking led because one of the board is not plugged to a PC so i can't use serial, and i made software as simple as possibile due to avoid timing problems, But i think it doesn't change so much.

For purposes of debugging, connect BOTH boards to the PC. Then, you CAN use serial. You need to know that one is sending data, and what it is sending.

You need to know that the other is receiving data, and what it is receiving.

You haven't described how the radios are connected to the Arduinos. It's time to do that, too.

i know, i didn't plugged the server to my PC because i have not any other USB cable available.
Anyway the server led is blinking so it's recieving correctly the client command ("Do") and i verified with the oscilloscope that on the Server tx line some data is sent just after recieving "Do" (I suppose that is the "Done" command), The problem is that no data flow trough the client rx line, like if the client RF module can't switch from transmit mode to recieve mode quick enough or something like that.
Using serial debugging wouldn't show me anything more also because server/client react to any command without checking what command is sent.

Anyway Here attached are the connections

Solved:
It seems the problem was how i passed the string (char *) to the vw_send function.
I didn't get exactly what were the problem but now is working

Echo server:

void setup(){
  vw_setup(2000);
  vw_rx_start();
  Serial.begin(9600);
}

void loop(){
  String rx = vw_string_recieved();
  if(rx!=""){
    Serial.println("Recieved: "+rx);
    sendString(rx);
  }
}

Serial to VirtualWire Client:

void setup(){
  vw_setup(2000);
  vw_rx_start();
  Serial.begin(9600);
}

void loop(){
  String wi_rx = vw_string_recieved();
  String ser_rx = SerialReadln();
  if(wi_rx!=""){
    Serial.println(wi_rx);
  }
  if(ser_rx!="") {
    sendString(ser_rx);
    //Serial.println("Sent: "+ser_rx);
  }
}

I used some utility function:

void sendString(String s){
	  uint8_t buf[VW_MAX_MESSAGE_LEN];
	  for(int i=0;i<s.length();i++) buf[i]=(uint8_t)s.charAt(i);
	  vw_send(buf,s.length());
	  vw_wait_tx();
	}

	String fromBufferToString(uint8_t *buf,uint8_t buflen){
	  String res = "";
	  for(int i=0;i<buflen;i++) res+=buf[i];
	  return res;
	}

	String SerialReadln(){
	   if(Serial.available()){
		char buffer[128];
		char i=0;
		char lastChar;
		while(lastChar!='\n' & i<128){
		  if(Serial.available()){
			lastChar=Serial.read();
			if(lastChar=='\n') buffer[i]='\0';
			else buffer[i]=lastChar;
			i++;
		  }
		}//riga finita
		return String(buffer);
	   }else{
		 return "";
	   }
	}
	
	String vw_string_recieved(){
		uint8_t buf[VW_MAX_MESSAGE_LEN];
		uint8_t buflen = VW_MAX_MESSAGE_LEN;
		if(vw_get_message(buf,&buflen)){
			return fromBufferToString(buf,buflen);
		}else return "";
	}

I'd like to know what do you think about my problem, my code or some exaustive explanation of the problem
Thanks to everyone