|
Highly Adaptive Penguin
Join Date: May 2005
Location: United States
Posts: 251
Rep Power: 4 
|
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;
}
}
|