Cpp_Noob
June 14th, 2009, 04:21 PM
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)
#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)
#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");
}
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)
#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)
#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");
}