i have a simple client and server application and i want to send a "hello" message from client to server but the i cant seem to get it right , and also when i close the client i cant reconnect back
The server also take ages to close , dunno if its the loop in the new thread that cousing this
can any1 see whats the problem with tis simple code?


Server code (Win32)

Code:
#include <windows.h>
#include <winsock.h>

#pragma comment(lib,"wsock32.lib")
#pragma comment(lib,"mpr.lib")

void sckListen();
void sckRecv();

SOCKADDR Addr; 
SOCKET Socket;
DWORD threadId;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{

     WSADATA WsaDat;
     if (WSAStartup(MAKEWORD(2,0), &WsaDat) != 0)
           {MessageBox(0,L"WSA Initialization failed.",L"",0);} 


      Socket = socket(AF_INET, SOCK_STREAM, 0);
      if (Socket == INVALID_SOCKET)
	  {MessageBox(0,L"Socket creation failed.",L"",0);} 


SOCKADDR_IN SockAddr; 
SockAddr.sin_port = 8877;
SockAddr.sin_family = AF_INET;//(TCP/IP)

SockAddr.sin_addr.S_un.S_addr = INADDR_ANY;


if (bind(Socket, (SOCKADDR *)(&SockAddr), sizeof(SockAddr)) == SOCKET_ERROR)
      {MessageBox(0,L"Attempt to bind failed.",L"",0);}

listen(Socket, 1); 


CreateThread( NULL, 0,(LPTHREAD_START_ROUTINE) sckListen,0, 0, &threadId);
CreateThread( NULL, 0,(LPTHREAD_START_ROUTINE) sckRecv,0, 0, &threadId);


while(true)
{
}

}


void sckListen()
{
SOCKET TempSock = SOCKET_ERROR;

while (true)
      {
		TempSock = accept(Socket, &Addr, (int *)sizeof(Addr));
		  
		if (TempSock !=SOCKET_ERROR)
		   {
			   Socket = TempSock;
			   TempSock = SOCKET_ERROR;
		   }
	  }
}


void sckRecv()
{
int RetVal = SOCKET_ERROR;
char String[6]={0};
while (RetVal == SOCKET_ERROR)
      {
      RetVal = recv(Socket, String, strlen(String) + 1, 0);
	  if (String[0] != NULL){
		  MessageBoxA(0,String,String,0);}

      if ((RetVal == 0)||(RetVal == WSAECONNRESET)||(RetVal == WSAECONNABORTED))
           {
           MessageBox(0,L"Connection closed at other end.",L"",0);
           break;
           }
      } 
}
Client code (Console)
Code:
#include <iostream>
#include <windows.h>
#include <winsock.h>

#pragma comment(lib,"wsock32.lib")
#pragma comment(lib,"mpr.lib")
using namespace std;

void main()
{
     WSADATA WsaDat;
     if (WSAStartup(MAKEWORD(2,0), &WsaDat) != 0)
           {cout << ("WSA Initialization failed.");} 

	 SOCKET Socket;
      Socket = socket(AF_INET, SOCK_STREAM, 0);
      if (Socket == INVALID_SOCKET)
           {printf("Socket creation failed.");} 


SOCKADDR_IN SockAddr;
SockAddr.sin_port = 8877;
SockAddr.sin_family = AF_INET;

SockAddr.sin_addr.S_un.S_un_b.s_b1 = 127;
SockAddr.sin_addr.S_un.S_un_b.s_b2 = 0;
SockAddr.sin_addr.S_un.S_un_b.s_b3 = 0;
SockAddr.sin_addr.S_un.S_un_b.s_b4 = 1;

if (connect(Socket, (SOCKADDR *)(&SockAddr), sizeof(SockAddr)) != 0)
      {printf("Failed to establish connection with server.");} 

char String[] = "hello";
send(Socket,String, strlen(String) + 1, 0);


system("pause");
}