http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=121585737&qb=TUFYUEVORElORw==&enc=utf8§ion=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 |