Code:
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>
#include <Windowsx.h>
#include <string>
#include <vector>
#include <process.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"Gdi32.lib")
#define IDB_TEXT1 101
#define IDB_TEXT2 102
#define Send 103
#define Server 104
#define Client 105
#define Ip 106
#define WM_SERVER (WM_USER + 108)
#define DATA_BUFSIZE 1024
HWND hwnd, hWin_1, hWin_2, hSend, hServer, hClient, hIp;
HANDLE h;
MSG Msg;
HDC hdc;
PAINTSTRUCT ps;
unsigned int port = 666, i;
string buffer, buffer2 = "You > ", buffer3;
SOCKET sock, Accept;
sockaddr_in sockad;
WPARAM wParam;
DWORD RecvBytes;
DWORD SendBytes;
DWORD Flags;
void Bind_and_Listen( int port )
{
WSADATA wsaData;
if(WSAStartup( MAKEWORD(2, 2), &wsaData ) != 0 ){
cout <<"WSAStartup() failed with error " << WSAGetLastError(); exit(1);
}
//Create a socket
if((sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )) == INVALID_SOCKET ){
cout <<"socket() failed with error " << WSAGetLastError(); WSACleanup(); exit(1);
}
if(WSAAsyncSelect(sock, hwnd, WM_SERVER, FD_ACCEPT|FD_CLOSE) == 0)
cout<<"WSAAsyncSelect() is OK\n";
else
cout<<"WSAAsyncSelect() failed with error code "<< WSAGetLastError() << "\n";
sockad.sin_family = AF_INET;
sockad.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr( "0.0.0.0" );
sockad.sin_port = htons( port );
if ( bind (sock, (SOCKADDR*) &sockad, sizeof( sockad) ) == SOCKET_ERROR )
{
cerr << "ServerSocket: Failed to bind "<< WSAGetLastError();
WSACleanup(); exit(1);
}
if (listen(sock, 5))
{
cout <<"listen() failed with error " << WSAGetLastError();
WSACleanup(); exit(1);
}
SendMessage(hWin_1, LB_INSERTSTRING, -1, (LPARAM)"WAITING FOR CLIENT...");
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg){
case WM_CREATE:
hWin_1 = CreateWindowEx(0,"ListBox", 0,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_WANTRETURN |
LBS_NOTIFY | WS_VSCROLL,
20, 20, 550, 460, hwnd, (HMENU)IDB_TEXT1, 0, NULL);
hWin_2 = CreateWindowEx(0,"Edit","Hi!",
WS_VISIBLE | WS_CHILD | WS_VSCROLL |
ES_MULTILINE ,
20, 500, 550, 180,hwnd,(HMENU) IDB_TEXT2, 0,NULL);
hSend = CreateWindowEx(0,"Button","Send",
WS_CHILD | WS_VISIBLE | WS_BORDER,
20, 700, 550, 20,hwnd,(HMENU)Send,0,NULL);
hServer = CreateWindowEx(0,"Button","Server",
WS_CHILD | WS_VISIBLE | WS_BORDER,
600, 20, 150, 20,hwnd,(HMENU)Server,0,NULL);
hClient = CreateWindowEx(0,"Button","Connect To Server",
WS_CHILD | WS_VISIBLE | WS_BORDER,
600, 50, 150, 20,hwnd,(HMENU)Client,0,NULL);
hIp = CreateWindowEx(0,"Edit","127.0.0.1",
WS_CHILD | WS_VISIBLE | WS_BORDER,
600, 80, 150, 20,hwnd,(HMENU) Ip,
((LPCREATESTRUCT)lParam)->hInstance,NULL);
SetFocus(hWin_2);
break;
case WM_COMMAND:
switch(wParam)
{
case Send:
//SendData(buffer);
break;
case Server:
Bind_and_Listen( port );
cout <<"server ok\r\n";
EnableWindow(hServer, FALSE);
EnableWindow(hClient, FALSE);
break;
case Client:
cout <<"client ok\r\n";
// Connect();
break;
}
//////////////////////////SERVER///////////////////////////////////////////
case WM_SERVER:
if(WSAGETSELECTERROR(lParam))
{ // If an error occurred,
cout<<WSAGetLastError()<<"\r\n";
closesocket (sock); WSACleanup (); // Shutdown Winsock
return 0;
}
switch(WSAGETSELECTEVENT(lParam))
{ // What happened, exactly?
cout<<lParam<<endl;
case FD_ACCEPT:
if ((Accept = accept(wParam, NULL, NULL)) == INVALID_SOCKET)
{
cout<<"accept() failed with error " << WSAGetLastError()<<"\n";
break;
}
else
cout<<"accept() is OK!\n";
SendMessage(hWin_1, LB_INSERTSTRING, -1, (LPARAM)"CLIENT CONNECTED.");
cout << "Socket number: " << Accept << " connected\n";
WSAAsyncSelect(Accept, hwnd, WM_SERVER, FD_READ|FD_CLOSE);
break;
case FD_READ:
//Receive data
cout <<"fdread\r\n";
//RecvData();
break;
case FD_CLOSE:
closesocket (Accept);
WSACleanup(); exit(1);
break;
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////WINMAIN/////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
//int main()
{
WNDCLASSEX wc;
wc.hInstance = hInstance;
wc.cbClsExtra = 0;
wc.cbSize = sizeof(WNDCLASSEX);
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH) CreateSolidBrush(RGB(200,300,200));
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = "Class";
wc.lpszMenuName = NULL;
wc.style = 0;
wc.hIconSm = NULL;
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_WINDOWEDGE,
"Class",
" The_Evil_Chatter",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 900, 800,
HWND_DESKTOP, NULL, hInstance, NULL);
if(hwnd == NULL){
MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}