Sending data from Arduino using WiShield v1.0

Hi, I am doing a project which controls a RC car with a VB program. I manage to send instructions in the form of characters to the Arduino by modifying the socketapp example. Now I need the Arduino to provide feedback or acknowledgement, how do I do that? And how do I retrieve these data from Arduino using VB?

Thanks!

/*
 * Socket App
 *
 * A simple socket application example using the WiShield 1.0
 */


#include <WiShield.h>
#include <string.h>

#define WIRELESS_MODE_INFRA	1
#define WIRELESS_MODE_ADHOC	2

// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[] = {192,168,0,25};	// IP address of WiShield
unsigned char gateway_ip[] = {192,168,0,1};	// router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0};	// subnet mask for the local network
const prog_char ssid[] PROGMEM = {"SSID"};		// max 32 bytes

unsigned char security_type = 2;	// 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2

// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"Password"};	// max 64 characters

// WEP 128-bit keys
// sample HEX keys
prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,	// Key 0
				  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// Key 1
				  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	// Key 2
				  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00	// Key 3
				};


// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;

unsigned char ssid_len;
unsigned char security_passphrase_len;
char buffer[20];

//struct socket_app_state *s;
//LED forward
int intForward = 4;  //pin 2 must not be used. will cause wifi to hang

//LED backward
int intBackward = 5;

//LED left
int intLeft = 7;

//LED right
int intRight = 8;



//---------------------------------------------------------------------------

void setup()
{
  Serial.begin(9600);      
  Serial.println("BlackWidow has started.");
  pinMode(intForward, OUTPUT);
  pinMode(intBackward, OUTPUT);
  pinMode(intLeft, OUTPUT);
  pinMode(intRight, OUTPUT);  
  InitialDemo();
  WiFi.init();
        
}

void loop()
{
  WiFi.run();
      
      switch (buffer[0])
      {
       case 'F':
         Serial.println("Forward");
         funcForward();
         break;
       case 'B':
         Serial.println("Reverse");
         funcBackward();
        // PSOCK_SEND_STR(&s->p, "Instruction ""Reverse"" is received.");
         break;
       case 'L':
         Serial.println("Left");
         funcLeft();
         //PSOCK_SEND_STR(&s->p, "Instruction ""Left"" is received.");
         break;
       case 'R':
         Serial.println("Right");
         funcRight();
         break;
       case 'S':
         Serial.println("Stop");
         funcStop();
         break;
       case 'N':
         Serial.println("Keep Straight");
         funcKeepStraight();
         break;
       
      }

      memset(buffer, 0x00, sizeof(buffer)); // Empty buffer 
}

void InitialDemo()
{
  // Go Forward PWM
  digitalWrite(intForward, HIGH);
  delay(50);
  // Go Backward PWM
  digitalWrite(intBackward, HIGH);
  delay(50);
    // Turn Left Pin
  digitalWrite(intLeft, HIGH);
  delay(50);
  // Turn Right Pin
  digitalWrite(intRight, HIGH);
  delay(50);
  
  digitalWrite(intForward, LOW);
  delay(50);
  digitalWrite(intBackward, LOW);
  delay(50);
  digitalWrite(intLeft, LOW);
  delay(50);
  digitalWrite(intRight, LOW);
  delay(50);


}

void funcForward()
{
  digitalWrite(intBackward, LOW);
  digitalWrite(intForward, HIGH);
}

void funcBackward()
{
  digitalWrite(intForward, LOW);
  digitalWrite(intBackward, HIGH);
}

void funcLeft()
{
  digitalWrite(intRight, LOW);
  digitalWrite(intLeft, HIGH);
}

void funcRight()
{
  digitalWrite(intLeft, LOW);
  digitalWrite(intRight, HIGH);
}

void funcStop()
{
  digitalWrite(intForward, LOW);
  digitalWrite(intBackward, LOW);
}

void funcKeepStraight()
{
  digitalWrite(intLeft, LOW);
  digitalWrite(intRight, LOW);
}
/******************************************************************************

  Filename:		socketapp.c
  Description:	Simple socket programming example for the WiShield 1.0

 ******************************************************************************

  TCP/IP stack and driver for the WiShield 1.0 wireless devices

  Copyright(c) 2009 Async Labs Inc. All rights reserved.

  This program is free software; you can redistribute it and/or modify it
  under the terms of version 2 of the GNU General Public License as
  published by the Free Software Foundation.

  This program is distributed in the hope that it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  more details.

  You should have received a copy of the GNU General Public License along with
  this program; if not, write to the Free Software Foundation, Inc., 59
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.

  Contact Information:
  <asynclabs@asynclabs.com>

   Author               Date        Comment
  ---------------------------------------------------------------
   AsyncLabs			06/06/2009	Initial version

 *****************************************************************************/

/*
 * This is a short example of how to write uIP applications using
 * protosockets.
 */

/*
 * We define the application state (struct socket_app_state) in the
 * socketapp.h file, so we need to include it here. We also include
 * uip.h (since this cannot be included in socketapp.h) and
 * <string.h>, since we use the memcpy() function in the code.
 */
#include "socketapp.h"
#include "uip.h"
#include <string.h>

/*
 * Declaration of the protosocket function that handles the connection
 * (defined at the end of the code).
 */
static int handle_connection(struct socket_app_state *s);
/*---------------------------------------------------------------------------*/
/*
 * The initialization function. We must explicitly call this function
 * from the system initialization code, some time after uip_init() is
 * called.
 */
void socket_app_init(void)
{
  /* We start to listen for connections on TCP port 1000. */
  uip_listen(HTONS(1000));
}
/*---------------------------------------------------------------------------*/
/*
 * In socketapp.h we have defined the UIP_APPCALL macro to
 * socket_app_appcall so that this function is uIP's application
 * function. This function is called whenever an uIP event occurs
 * (e.g. when a new connection is established, new data arrives, sent
 * data is acknowledged, data needs to be retransmitted, etc.).
 */
void socket_app_appcall(void)
{
  /*
   * The uip_conn structure has a field called "appstate" that holds
   * the application state of the connection. We make a pointer to
   * this to access it easier.
   */
  struct socket_app_state *s = &(uip_conn->appstate);

  /*
   * If a new connection was just established, we should initialize
   * the protosocket in our applications' state structure.
   */
  if(uip_connected()) {
    PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));
  }

  /*
   * Finally, we run the protosocket function that actually handles
   * the communication. We pass it a pointer to the application state
   * of the current connection.
   */
  handle_connection(s);
}
/*---------------------------------------------------------------------------*/
/*
 * This is the protosocket function that handles the communication. A
 * protosocket function must always return an int, but must never
 * explicitly return - all return statements are hidden in the PSOCK
 * macros.
 */
static int handle_connection(struct socket_app_state *s)
{
  PSOCK_BEGIN(&s->p);

  PSOCK_SEND_STR(&s->p, "Hello. What is you name?\n");
  PSOCK_READTO(&s->p, '\n');
  PSOCK_SEND_STR(&s->p, "Hello ");
  PSOCK_SEND_STR(&s->p, s->inputbuffer);
  memset(s->inputbuffer, 0x00, sizeof(s->inputbuffer));
  PSOCK_CLOSE(&s->p);

  PSOCK_END(&s->p);
}
/*---------------------------------------------------------------------------*/