학교 실습/네트워크

tcp_server/client

Black_HellCat 2013. 10. 4. 17:02

tcp_server.c


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#include <sys/types.h>

#include <sys/socket.h>


void error_handling(char *message);


int main(int argc, char *argv[])

{

int serv_sock;

int clnt_sock;


struct sockaddr_in serv_addr;

struct sockaddr_in clnt_addr;

socklen_t clnt_addr_size;


char message[]="Hello World!";

if(argc!=2){

printf("Usage : %s <port>\n", argv[0]);

exit(1);

}

serv_sock=socket(PF_INET, SOCK_STREAM, 0);

if(serv_sock == -1)

error_handling("socket() error");

memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);

serv_addr.sin_port=htons(atoi(argv[1]));

if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)

error_handling("bind() error"); 

if(listen(serv_sock, 5)==-1)

error_handling("listen() error");

clnt_addr_size=sizeof(clnt_addr);  

clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr,&clnt_addr_size);

if(clnt_sock==-1)

error_handling("accept() error");  

write(clnt_sock, message, sizeof(message));

close(clnt_sock);

close(serv_sock);

return 0;

}


void error_handling(char *message)

{

fputs(message, stderr);

fputc('\n', stderr);

exit(1);

}


/////////////////////////////////////


tcp_client.c


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#include <sys/types.h>

#include <sys/socket.h>


void error_handling(char *message);


int main(int argc, char* argv[])

{

int sock;

struct sockaddr_in serv_addr;

char message[30];

int str_len=0;

int idx=0, read_len=0;

if(argc!=3){

printf("Usage : %s <IP> <port>\n", argv[0]);

exit(1);

}

sock=socket(PF_INET, SOCK_STREAM, 0);

if(sock == -1)

error_handling("socket() error");

memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=inet_addr(argv[1]);

serv_addr.sin_port=htons(atoi(argv[2]));

if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1) 

error_handling("connect() error!");


while(read_len=read(sock, &message[idx++], 1))

{

if(read_len==-1)

{

error_handling("read() error!");

break;

}

str_len+=read_len;

}


printf("Message from server: %s \n", message);

printf("Function read call count: %d \n", str_len);

close(sock);

return 0;

}


void error_handling(char *message)

{

fputs(message, stderr);

fputc('\n', stderr);

exit(1);

}