본문 바로가기

IT

socket...........

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=121585737&qb=TUFYUEVORElORw==&enc=utf8&section=kin&rank=5&search_sort=0&spq=0


에서 가져와서


이것저것바꿨는데...


안된다 -_-


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <signal.h>

#include <time.h>

#include <arpa/inet.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <sys/wait.h>


#define PORT 9091

#define MAXPENDING 20


void error_handling(char *message);

void z_handler(int sig);


int main(void)

{

int serv_sock;

int clnt_sock;

int recvLen,idLen;

int state;

int sock_len;


char recvMsg[BUFSIZ];

char connected_id[BUFSIZ];

char user[BUFSIZ];

char buf[BUFSIZ];

char file_name[BUFSIZ];


FILE *fp;


pid_t pid;

time_t time_now;


struct tm *tm_local;

struct sockaddr_in serv_addr;

struct sockaddr_in clnt_addr;

struct sigaction act;


act.sa_handler=z_handler;

sigemptyset(&act.sa_mask);

act.sa_flags=0;

state=sigaction(SIGCHLD,&act,0);


if(state!=0) { error_handling("signalhandlingerror"); }


serv_sock=socket(PF_INET,SOCK_STREAM,0);

if(serv_sock==-1){ error_handling("socketcreatingerror"); }


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(PORT);


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

{ error_handling("failtobinding"); }


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

{ error_handling("failtolistening"); }


while(1)

{

sock_len = sizeof(clnt_addr);

if(clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_addr,&sock_len)==-1)

{ error_handling("acceptingerror"); }


pid=fork();

if(pid==-1)

{

close(clnt_sock);

error_handling("fokrerror");

}


else if(pid!=0)

{

close(clnt_sock);

printf("createconnection\n");

continue;

}


else

{

close(serv_sock);

if((idLen=recv(clnt_sock,connected_id,BUFSIZ-1,0))==-1)

{ error_handling("failtoreceiveconnected_id"); }


strncpy(user,connected_id,strlen(connected_id)-1);

time(&time_now);

tm_local=localtime(&time_now);

strftime(buf,sizeof(buf),"%Y%m%d%H%M%S",tm_local);

strcat(file_name,"../log/");

strcat(file_name,buf);

strcat(file_name,"_");

strcat(file_name,user);

strcat(file_name,".log");

if((fp=fopen(file_name,"w"))==NULL)

{ error_handling("failtoopenfile"); }


while((recvLen=recv(clnt_sock,recvMsg,sizeof(recvMsg),0))>0)

{

recvMsg[recvLen]='\0';//endofstring

if(send(clnt_sock,recvMsg,recvLen,0)!=recvLen)

{ error_handling("datatranfererror"); }


printf("%s:%s",user,recvMsg);

fwrite(recvMsg,recvLen,1,fp);

}

//whenclientdisconnection

if(recvLen<=0)

{ printf("disconnected\n"); }


fclose(fp);

close(clnt_sock);

exit(0);

}

}

return 0;

}


void error_handling(char *message)

{

printf("%s\n",message);

exit(1);

}


void z_handler(int sig)

{

pid_t pid;

int rtn;

while(1)

{

pid=waitpid(-1,&rtn,WNOHANG);

if(pid!=0){ break; }

}

}




















#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#include <sys/socket.h>

#include <sys/types.h>


#define PORT 9091


void error_handling(char *message);


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

{

int sock;

int str_len;


char sendMsg[BUFSIZ],recvMsg[BUFSIZ];

char id[BUFSIZ];


struct sockaddr_in serv_addr;


if(argc!=2)

{

printf("%s:missingoperand\n",argv[0]);

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

exit(1);

}


if(sock=socket(PF_INET,SOCK_STREAM,0)==-1)

{ error_handling("failtocreatesocket"); }


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(PORT);


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

{ error_handling("connectionerror"); }


printf("enteryourid:");

fgets(id,BUFSIZ,stdin);

if(send(sock,id,strlen(id),0)!=strlen(id))

{ error_handling("sendingiderror"); }


while(1)

{

fgets(sendMsg,BUFSIZ,stdin);

if(!strncmp(sendMsg,"quit",4))

{ break; }


if(send(sock,sendMsg,strlen(sendMsg),0)!=strlen(sendMsg))

{ error_handling("datatransfererror"); }


if((str_len=recv(sock,recvMsg,sizeof(recvMsg),0))==-1)

{ error_handling("failtoreceive"); }


recvMsg[str_len]='\0';

printf("Recieved:%s\n",recvMsg);

}


close(sock);

exit(0);

}


void error_handling(char *message)

{

printf("%s\n",message);

exit(1);

}



'IT' 카테고리의 다른 글

timeserv와 timeclnt...  (0) 2014.12.14
(설계) Messenger with system call  (0) 2014.12.12
two word count 4  (0) 2014.12.09
two word 2  (0) 2014.12.09
two word count 1 .c  (0) 2014.12.09