카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/07

socket client programming

/*
 * filename server_ipaddress portno
 *
 * argv[0] filename
 * argv[1] server_ipaddress]
 * argv[2] portno */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

void error(const char *msg)
{
perror(msg);
exit(0);
}

int main(int argc, char *argv[]){
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;

char buffer[256];
if (argc < 3) {
fprintf(stderr, "usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");

server = gethostbyname(argv[1]);
if(server == NULL){
fprintf(stderr, "Error, no such host");
}

bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *) server->h_addr, (char *) &serv_addr.sin_addr.s_addr, server->h_length);
serv_addr.sin_port = htons(portno);
if(connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
error("Connection Failed:");

int num1, num2, choice, ans;
S: bzero(buffer, 256);
   n = read(sockfd, buffer, 255); //Read Server String
   if (n < 0)
   error("Error reading from socket");
   printf("Server - %s\n", buffer);
   scanf("%d", &num1); //Enter No 1
   write(sockfd, &num1, sizeof(int)); //Send No 1 to Server

   bzero(buffer, 256);
   n = read(sockfd, buffer, 255); //Read Server String
   if (n < 0)
           error("Error reading from socket");
   printf("Server - %s\n", buffer);
   scanf("%d", &num2); //Enter No 2
   write(sockfd, &num2, sizeof(int)); //Send No 2 to Server

   bzero(buffer, 256);
   n = read(sockfd, buffer, 255);
   if (n < 0)
   error("ERROR reading from socket");
   printf("Server - %s", buffer);
   scanf("%d", &choice);
   write(sockfd, &choice, sizeof(int));

   if(choice == 5)
   goto Q;

   read(sockfd, &ans, sizeof(int));
   printf("Server - The answer is: %d\n", ans);

   if(choice != 5)
   goto S;

Q :
   printf("You have selected to exit.Exit Successful.");
close(sockfd);
return 0;

}

// compile: gcc -o client client.c
// ./client 127.0.0.1 9999

댓글 없음:

댓글 쓰기