1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
// server
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
int sockfd, new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size, portnumber;
char hello[] = "Hello! Are You Fine?\a\n";
if (argc != 2)
{
fprintf(stderr, "Usage: %s protnumber\n", argv[0]);
exit(1);
}
if((portnumber = atoi(argv[1])) < 0)
{
fprintf(stderr, "Usage: %s protnumber\n", argv[0]);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
fprintf(stderr, "Usage: %s portnumber\n", strerror(errno));
exit(1);
}
bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(portnumber);
if(bind(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr)) == -1)
{
fprintf(stderr, "Bind error: %s\n", strerror(errno));
exit(1);
}
if(listen(sockfd, 5) == -1)
{
fprintf(stderr, "Listen error: %s\n", strerror(errno));
exit(1);
}
while(1)
{
sin_size = sizeof(struct sockaddr_in);
if (new_fd = accept(sockfd, (struct sockaddr *)(&client_addr), &sin_size) == -1)
{
fprintf(stderr, "Accept error: %s\n", strerror(errno));
exit(1);
}
fprintf(stderr, "Server get connection from %s\n", inet_ntoa(client_addr.sin_addr));
if (write(new_fd, hello, strlen(hello)) == -1)
{
fprintf(stderr, "Write Error: %s\n", strerror(errno));
exit(1);
}
close(new_fd);
}
close(sockfd);
return 0;
}
|