/*create simple client TCP_IP*/ #include <winsock.h> #include <iostream> #define MY_PORT 2456 #define BIND_ERROR SOCKET_ERROR #define CONNECT_ERROR SOCKET_ERROR #include<conio2.h> #include<string.h> using namespace std;
int main(int argc, char *argv[]) { WSAData WSApepenet;//declared struct (conseptual dll of windows dedicated to internet "Windows Sockets Addres") //WSAData es una estructura con datitos que nunca manejas int mysocket;//declared descriptor socket sockaddr_in mydata_in;//declared necesary data for ADDResing _INternet //donde veas addr, es casi seguro que es la IP o tiene un elemeto addr que es la ip //addr=IP int sizedata=sizeof(struct sockaddr);//size of data addresing char bufsend[14];//mensege to server char bufrecv[14];//menssaje for server strcpy(bufsend,"hello server"); if (WSAStartup(MAKEWORD(1, 1), &WSApepenet)) { cerr << "WSAStartup failure"; getch(); return 1; }//initialize sockets dll, WSAStartup return nonzero on failure if(!(mysocket=socket(PF_INET,SOCK_STREAM,0))) { cerr<<"Invalid Soket"; WSACleanup();//desconect WSA getch(); return 1; }//initialize descriptor socket (TCP_IP) //PF_INET=Protocol Family _INternET mydata_in.sin_family=AF_INET;//Addresing Family _INternET mydata_in.sin_port=htons(MY_PORT);//tranfer short int and insert my port mydata_in.sin_addr.s_addr=htonl(INADDR_ANY);//tranfer and insert dynamic IP, la del server //que solo en este caso es la propia, ya que server y cliente estaran en la misma pc memset(&(mydata_in.sin_zero),'\0',8);//fill with zero, free espace //allready fill mydata_in // para evetar "Address already in use" error message char reus; reus='1'; char* reuse; reuse=&reus; if (setsockopt(mysocket,SOL_SOCKET,SO_REUSEADDR,reuse,sizeof(char))==-1) { cerr<<"setsockopt failure"; if(SOCKET_ERROR==(closesocket(mysocket)))cerr<<"\nClose soket failure";//desconect socket WSACleanup(); return 1; } if(BIND_ERROR==(bind(mysocket,(struct sockaddr*)& mydata_in,sizedata))) { cerr<<"set to listen failure"; if(SOCKET_ERROR==(closesocket(mysocket)))cerr<<"\nClose soket failure";//desconect socket WSACleanup();//desconect WSA getch(); return 1; }//set to listen in the port on client //pone la oreja en la puerta, pero no escucha nada de nada //nos conectaremos con nosotros mismos, por eso uso mydata_in en connect //los clientes tenemos una sola oreja y usamos solo esa, a menos que querramos conecciones complejas if(CONNECT_ERROR==(connect(mysocket,(struct sockaddr*)& mydata_in,sizedata))) { cerr<<"conecct failure"; if(SOCKET_ERROR==(closesocket(mysocket)))cerr<<"\nClose soket failure";//desconect socket WSACleanup();//desconect WSA getch(); return 1; }//nos conectamos!!! cout<<"\nSending data..."; send(mysocket,bufsend,sizeof(bufsend),0);//send data of the bufsend cout<<"\nRecived data..."; recv(mysocket,bufrecv,sizeof(bufrecv),0);//recive data in bufrecv //recv return size of the mensaje cout<<"\n"<<bufrecv; cout<<"\end of simple client..."; //como no vamos a comunicarnos más con server... if(SOCKET_ERROR==(closesocket(mysocket)))cerr<<"\nClose soket failure";//desconect socket WSACleanup();//desconect WSA getch(); return 0; }
|