View Single Post
Old Aug 19th, 2005, 12:31 PM   #26
Brent
Highly Adaptive Penguin
 
Brent's Avatar
 
Join Date: May 2005
Location: United States
Posts: 251
Rep Power: 4 Brent is on a distinguished road
hows this:
#include<winsock.h>
#include<windows.h>
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<fstream.h>
#pragma comment(lib,"wsock32.lib")
#define MAXBUFLEN 500


//functions
void send_recv();


//global variables
short int port;
int connected=false;
int sent=false;
int received=false;
int client_connected=false;
char rdata[MAXBUFLEN];
char data[500];
char socket_array[4][4];


//socket stuff
SOCKET server;
WORD sockversion;
WSADATA wsaData;

int main(void)
{
	if((sockversion=WSAStartup(0x0101,&wsaData))!=SOCKET_ERROR)
	{	
		if((server=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)  )!=INVALID_SOCKET)
		{
			sockaddr_in from;
			int fromlen=sizeof(from);
			
			sockaddr_in sin;
			sin.sin_family=AF_INET;
			sin.sin_port=htons(80);
			sin.sin_addr.s_addr=INADDR_ANY;
			
		
			
			if((bind(server,(LPSOCKADDR)&sin,sizeof(sin)))!=SOCKET_ERROR)
			{	
				if((listen(server,4))!=SOCKET_ERROR)
				{
					SOCKET socket_array[1][1];
					if((socket_array[1][1]=accept(server,NULL,NULL))!=SOCKET_ERROR  )
					{
						fd_set ReadFDs, WriteFDs, ExceptFDs;
						FD_ZERO(&ReadFDs);
						FD_ZERO(&WriteFDs);
						FD_ZERO(&ExceptFDs);
					
						if(server != INVALID_SOCKET) 
						{
							FD_SET(server, &ReadFDs);
							FD_SET(server, &ExceptFDs);
						}
				
						
						if(select(0, &ReadFDs, &WriteFDs, &ExceptFDs, 0)>0)
						{
							client_connected=true;
							connected=true;
							cout<<"\n";
							cout<<"-----------------------\n";
							cout<<"welcome to Network Chat\n";
							cout<<"-----------------------\n";
							cout<<"-hlp for help\n";
							cout<<"\n";
						
							while(true)
							{
								char escape[5]="-q";
								char ip_addr[5]="-ip";
								char clear[5]="-clr";
								char help[5]="-hlp";
								char disconn[5]="-dis";
								char conn[5]="-con";
								char status[6]="-stat";
							
								cout<<">> ";
								cin.get(data,sizeof(data));
								cin.ignore(80,'\n');		
								if(strcmp(data,escape)==0)
								{
									WSACleanup();
									closesocket(socket_array[4][4]);
									return 0;
								}
								else if(strcmp(data,ip_addr)==0)
								{
									cout<<"\n";
									cout<<"<your IP: "<<inet_ntoa(sin.sin_addr)<<"> "<<'\n';
									cout<<"<your port: "<<htons(sin.sin_port)<<">"<<'\n';
									cout<<"\n";
									cout<<"<server IP: "<<inet_ntoa(from.sin_addr)<<"> "<<'\n';
									cout<<"<server port: "<<htons(from.sin_port)<<"> "<<'\n';
									cout<<"\n";
								}
								else if(strcmp(data,clear)==0)
								{
									system("cls");
								}
								else if(strcmp(data,help)==0)
								{
									cout<<"\n";
									cout<<"-q    quit\n";
									cout<<"-clr  clear screen\n";
									cout<<"-ip   server IP and port #\n";
									cout<<"-dis  disconnect from server\n";
									cout<<"-stat connection status( 1 = connected, 0 = not connected)\n";
									cout<<"\n";
								}
								else if(strcmp(data,disconn)==0)
								{
									cout<<"\n";
									closesocket(server);
									closesocket(socket_array[4][4]);
									WSACleanup();
									connected=false;
									cout<<"you have disconnected\n";
									cout<<"\n";
								}
								else if(strcmp(data,status)==0)
								{
									cout<<"\n";
									cout<<"<connection status: "<<connected<<" >"<<'\n';
									cout<<"\n";
								}
								else
								{
									send_recv();
								}				
							}
						}
						else
						{
							cout<<"failed select()\n";
							WSACleanup();
						}
					}
					else
					{
						connected=false;
						cout<<"failed accept\n";
						closesocket(server);
						closesocket(socket_array[4][4]);
						WSACleanup();
					}
				}
				else
				{
					connected=false;
					cout<<"failed bind\n";
					closesocket(server);
					closesocket(socket_array[4][4]);
					WSACleanup();
				}
			}
			else
			{
				connected=false;
				cout<<"failed bind\n";
				closesocket(server);
				closesocket(socket_array[4][4]);
				WSACleanup();
			}
		}
		else
		{
			connected=false;
			cout<<"invalid socket\n";
			WSACleanup();
			return 0;
		}
	}
	else
	{
		cout<<"WSAStartup() failed\n";
		WSACleanup();
		return 0;	
	}
}

void send_recv()
{	
	if((recv(socket_array[4][4],rdata,MAXBUFLEN-1,0))==SOCKET_ERROR)
	{
		received=false;
		int error=WSAGetLastError();
		if(error==WSAENOTSOCK)
		{
			cout<<"not a valid socket\n";
			WSACleanup();
		}
		else if(error==WSAENOTCONN)
		{
			cout<<"socket not connected\n";
			WSACleanup();
		}
		cout<<"failed recv\n";
		WSACleanup();
	}
	else
	{
		received=true;
		cout<<"client says: "<<rdata<<'\n';
	}
	
	
	if((send(server,data,sizeof(data),0))==SOCKET_ERROR)
	{
		sent=false;
		cout<<"failed send\n";
		WSACleanup();
	}
	else
	{
		sent=true;
	}
	
}
Brent is offline   Reply With Quote