// SERVER TCP PROGRAM // revised and tidied up by // J.W. Atwood // 1999 June 30 // There is still some leftover trash in this code. /* send and receive codes between client and server */ /* This is your basic WINSOCK shell */ #pragma comment( linker, "/defaultlib:ws2_32.lib" ) #include #include #include #include #include #include using namespace std; //port data types #define REQUEST_PORT 0x5001 int port=REQUEST_PORT; //socket data types SOCKET s; SOCKET s1; SOCKADDR_IN sa; // filled by bind SOCKADDR_IN sa1; // fill with server info, IP, port SOCKADDR_IN sa_in; union {struct sockaddr generic; struct sockaddr_in ca_in;}ca; int calen=sizeof(ca); //buffer data types char szbuffer[1024]; char *buffer; int ibufferlen; int ibytesrecv; int ibytessent; //host data types char localhost[11]; HOSTENT *hp; //wait variables int nsa1; int r,infds=1, outfds=0; #define UTIMER 300000 #define STIMER 0 struct timeval timeout; const struct timeval *tp=&timeout; fd_set readfds; //others HANDLE test; DWORD dwtest; //packet struct Packet { char header[8]; char sequence[1]; char message[1016]; }; //reference for used structures /* * Host structure struct hostent { char FAR * h_name; official name of host * char FAR * FAR * h_aliases; alias list * short h_addrtype; host address type * short h_length; length of address * char FAR * FAR * h_addr_list; list of addresses * #define h_addr h_addr_list[0] address, for backward compat * }; * Socket address structure struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; */ int main(void){ WSADATA wsadata; timeout.tv_sec=STIMER; timeout.tv_usec=UTIMER; //Blank packet Packet packet; memset(&packet,0,1024*sizeof(char)); try{ if (WSAStartup(0x0202,&wsadata)!=0){ cout<<"Error in starting WSAStartup()\n"; }else{ buffer="WSAStartup was suuccessful\n"; WriteFile(test,buffer,sizeof(buffer),&dwtest,NULL); /* display the wsadata structure */ cout<< endl << "wsadata.wVersion " << wsadata.wVersion << endl << "wsadata.wHighVersion " << wsadata.wHighVersion << endl << "wsadata.szDescription " << wsadata.szDescription << endl << "wsadata.szSystemStatus " << wsadata.szSystemStatus << endl << "wsadata.iMaxSockets " << wsadata.iMaxSockets << endl << "wsadata.iMaxUdpDg " << wsadata.iMaxUdpDg << endl; } //Display info of local host gethostname(localhost,10); cout<<"hostname: "< 1016*sizeof(char); size -= 1016) { memset(packet.message,0,1016*sizeof(char)); memset(szbuffer+8*sizeof(char),0,1016*sizeof(char)); //Get packet if((ibytesrecv = recv(s1,szbuffer,1024,0)) == SOCKET_ERROR) throw "Receive error in server program\n"; memcpy(packet.message, szbuffer+8*sizeof(char), 1016*sizeof(char)); file.write(packet.message, 1016*sizeof(char)); } memset(packet.message,0,1016*sizeof(char)); memset(szbuffer+8*sizeof(char),0,1016*sizeof(char)); //Get last packet if((ibytesrecv = recv(s1,szbuffer,1024,0)) == SOCKET_ERROR) throw "Receive error in server program\n"; memcpy(packet.message, szbuffer+8*sizeof(char), size*sizeof(char)); file.write(packet.message, size*sizeof(char)); file.close(); cout << "Transfer Complete\n"; } else { }*/ }//wait loop } //try loop //Display needed error message. catch(char* str) { cerr<