//con
#include <winsock.h>
#include <stdio.h>
#include "c:/c++/cm/extr.c"
int STDCALL s_perror(const char *msg, int err);
void error(char *msg)
{
long f = WSAGetLastError();
fprintf(stderr,"%d",f);
s_perror(msg, f);
WSACleanup();
exit(1);
}
void
bcopy(void *pbron, void *pbest, int n)
{
char *p0,*p1;
int i;
p0 = pbron;
p1 = pbest;
for(i=0;i<n;i++)
p1[i] = p0[i];
}
#define bzero ZeroMemory
main(int argc, char **argv)
{
int r;
WSADATA wsa;
long f;
char * servernaam2=0;
char *serverip87 = "a.b.c.d";
char serverip[256] = "a.b.c.d";
int poort = 50505;
int sockfd, n;
struct sockaddr_in server_adres={0};
struct hostent *server;
char buffer[256],buffer2[256];
//pars argumenten
if( argc>=2 )
{
lstrcpy(serverip , argv[1]);
}
if( argc>=3 )
{
if( sscanf(argv[2],"%d",&poort)==0 )
printf("Poort %s van commandoregel is ongeldig.\n"
"Poort wordt %d\n", argv[2], poort);
}
r=WSAStartup(0x101,&wsa);
if ( r )
{
fputs("WSAStartup failed", stderr);
WSACleanup();
exit(-1);
}
// r=gethostname(hostname,256);
// f=WSAGetLastError();
// if(r)printf("r=%d f=%d\n",r,f);
// else printf("hostname = %s \n", hostname);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server_adres.sin_addr.s_addr = inet_addr( serverip );
printf("%s\n", inet_ntoa(server_adres.sin_addr) );
printf("voor gethostbyaddr( &server_adres.s_addr )\n");
server = gethostbyaddr ( (char*) &server_adres.sin_addr, 4, PF_INET);
printf("na gethostbyaddr( &server_adres.s_addr )\n");
if (server == NULL)
{
fprintf(stdout,"Host is niet gevonden %s \n",inet_ntoa(server_adres.sin_addr));
}
else
{
char **s;
printf("hostname=%s\n", servernaam2=server->h_name);
printf("hostalias="); s = server->h_aliases;
if( *s )
while( *s )printf("%s\n",*(s++));
else printf("(NULL)\n");
printf("adreslist="); s = server->h_addr_list;
if( *s )
while( *s )bufferuitn( *(s++),4);
else printf("(NULL)\n");
}
server_adres.sin_family = AF_INET;
//server_adres.s_addr = inet_addr( serverip ); al eerder gezet
server_adres.sin_port = htons(poort);
connectsock:
if( server_adres.sin_port==0 )
{
printf("geef poort(50505):");
poort = getli(poort);
server_adres.sin_port = htons( poort );
if( poort==888 )goto stuurbericht;
}
printf("maak verbinding met server %s ip=%s poort=%d...",
servernaam2, inet_ntoa(server_adres.sin_addr),poort);
WSASetLastError(888);
if( connect(sockfd,(struct sockaddr*)&server_adres,sizeof(server_adres) ) < 0)
{
f = WSAGetLastError();
printf("\nEr kan geen verbinding gemaakt worden met de server\n");
printf("f=%d\n",f);
server_adres.sin_port = 0; goto connectsock;
}
else
{
struct sockaddr_in dit_adres={0};
int len = sizeof dit_adres;
printf("\nverbonden met %s ip=%s poort=%d\n",
servernaam2, inet_ntoa(server_adres.sin_addr),poort);
getsockname(sockfd, (struct sockaddr*)&dit_adres, &len);
printf("\ndeze ip=%s poort=%d\n",
inet_ntoa(dit_adres.sin_addr),dit_adres.sin_port);
}
stuurbericht:
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
switch( buffer[0] )
{
case 27 : goto cleanup;
case 'q': goto sluit;
case '0': closesocket(sockfd); goto stuurbericht;
case '1': shutdown(sockfd,0); goto stuurbericht;
case '2': shutdown(sockfd,1); goto stuurbericht;
case '3': shutdown(sockfd,2); goto stuurbericht;
case 'o': goto ontvangbericht;
case 'c': server_adres.sin_port = 0; goto connectsock;
}
n = send(sockfd,buffer,strlen(buffer),0);
if (n < 0)
error("ERROR writing to socket");
printf("nsend= %d\n",n);
if( buffer[0]=='s' )goto stuurbericht;
ontvangbericht:
bzero(buffer2,256);
n = recv(sockfd,buffer2,255,0);
if (n < 0)
error("ERROR reading from socket");
printf("n=%d %s\n",n,buffer2);
if( buffer[0]=='0' || buffer[0]==27 || strcmp(buffer,"quit\n")==0
|| strcmp(buffer,"stop\n")==0);
else goto stuurbericht;
sluit:
closesocket(sockfd);
cleanup:
WSACleanup();
}