كود:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
//#include "clientserver.h"
int w =0;
#define BUFLEN 512
int main(int argc, char **argv)
{
struct sockaddr_in si_local, si_remote;
int s;
int port;
unsigned int slen;
char buf[BUFLEN];
if(w==0)//stupid line
{//stupid line
slen = sizeof(si_remote);
if(argc!=2)
{
fprintf(stderr, "Usage: %s <port number>\n", argv[0]);
exit(EXIT_FAILURE);
}
port=atoi(argv[1]);
if(port<1024)
{
fprintf(stderr, "Usage: %s <port number>\n", argv[0]);
fprintf(stderr, "\twhere <port number> shall be > 1023\n");
exit(EXIT_FAILURE);
}
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
{
perror("socket");
exit(EXIT_FAILURE);
}
memset((char *) &si_local, 0, sizeof(si_local));
si_local.sin_family = AF_INET;
si_local.sin_port = htons(port);
si_local.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(s, (const struct sockaddr *)&si_local, sizeof(si_local))==-1)
{
perror("bind");
exit(EXIT_FAILURE);
}
int long q= 100;
while(q>0)
{
q--;
memset(buf, 0, sizeof(char)*BUFLEN);
if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *)&si_remote, &slen)==-1)
{
perror("recvfrom()");
exit(EXIT_FAILURE);
}
if(strstr(buf, ".quit.")!=NULL)
{
printf("\".quit.\" Received \n");
printf("Exiting\n");
break;
}
else
{
printf("Received packet from %s:%d\n", inet_ntoa(si_remote.sin_addr),
ntohs(si_remote.sin_port));
printf("Data: %s\n", buf);
}
}
w++;//stupid line
// Here some code have to added.
}//stupid line
//*********************************************Client************************************
printf("Hello Client Part\n");
struct sockaddr_in si_server;
// int port, s, i, slen=sizeof(si_server);
// char buf[BUFLEN];
char srv_addr[16];
memset(srv_addr, 0, 16);
if(argc<3)
{
fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);
exit(EXIT_FAILURE);
}
port=atoi(argv[2]);
printf("port = %d\n", port);
if(port<1024)
{
fprintf(stderr, "Usage: %s <destination IP address> <port number>\n", argv[0]);
fprintf(stderr, "\twhere <port number> shall be > 1023\n");
exit(EXIT_FAILURE);
}
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
{
perror("socket");
exit(EXIT_FAILURE);
}
memcpy(srv_addr, argv[1], strlen(argv[1]));
memset((char *) &si_server, 0, sizeof(si_server));
si_server.sin_family = AF_INET;
si_server.sin_port = htons(port);
if (inet_aton(srv_addr, &si_server.sin_addr)==0)
{
fprintf(stderr, "inet_aton() failed\n");
exit(EXIT_FAILURE);
}
if(argc==4)
{
sprintf(buf, "%s", argv[3]);
if (sendto(s, buf, strlen(argv[3]), 0, (struct sockaddr *)&si_server, slen)==-1)
{
perror("sendto()");
exit(EXIT_FAILURE);
}
}
else
{
int x;
for (x=0; x<100; x++)
{
printf("Sending packet %d\n", x);
sprintf(buf, "This is packet %d\n", x);
if (sendto(s, buf, BUFLEN, 0, (struct sockaddr *)&si_server, slen)==-1)
{
perror("sendto()");
exit(EXIT_FAILURE);
}
}
}
close(s);
exit (EXIT_SUCCESS);
w=0;//stupid line
return 0;
}
المفضلات