목차
1. 프로그램 개요
2. 프로그램 설명
3. 프로그램 실행화면
4. 프로그램 소스
2. 프로그램 설명
3. 프로그램 실행화면
4. 프로그램 소스
본문내용
else if(temp == 3){
me->status = 0;
}
printf("me->status is %d\n",me->status);
if(write(s,(struct friends*)me,sizeof(struct friends)) < 0){
puts("Error : error on socket");
}
printf("send message!\n");
if(strstr(buf,EXIT_STR) != NULL){
puts("Good bye");
close(s);
exit(0);
}
}else{
printf("입력이 잘못되었습니다. 다시 확인하세요.\n");
}
// 문자열을 입력받았다고 판단
// 친구와 채팅을 하려면 친구 아이디를 입력
// 입력한 아이디가 존재하는 경우 서로
// 채팅을 가능하도록 한다.
} else if(len >= 3){
printf("문자열 입력\n");
chat = 99;
//printf("buf : %s len : %d\n",buf,strlen(buf));
for(k = 0 ; k < MAX_CLIENT ; k++){
if((clientarray[k].status != 99) && (strstr(buf,clientarray[k].name) != NULL)){
chat = k;
break;
}
}
printf("chat is : %d\n",chat);
if(chat != 99){
//올바르게 다른 클라이언트의 이름이 입력되었을때..
//서버에 현재 상태를 바꾸고..
printf("chat: %d, %s\n",chat,clientarray[chat].name);
//상태 바꾸고,채팅 원하는 상대의 이름을 보낸다.
me->status = 3;
sprintf(me->name,"%s",buf);
sprintf(me->port,"%s","7000");
if(write(s,(struct friends*)me,sizeof(struct friends)) < 0){
puts("Error : Write error on socket");
}
//자식프로세스 생성 udp 서버가 된다.
if((pid = fork()) == 0){
if(execl("./udpser","udpser",me->port,(char *)0) < 0)
printf("exec error\n");
}
//부모 프로세스는 자식프로세스가 종료할때까지 기다린다.
else{
if(pid == wait()){
me->status = 1;
printf("argv[3] : %s\n",argv[3]);
sprintf(me->name,"%s",argv[3]);
printf("before parent write\n");
if(write(s,(struct friends*)me,sizeof(struct friends)) < 0){
puts("Error : Write error on socket");
}
printf("after parent write\n");
}
}
}else{
printf("입력이 잘못되었습니다. 다시 확인하세요.\n");
}
}
}
}
}
free(me);
return 0;
}
//서버와 연결해주는 함수 : 반환값 소켓 번호
int tcp_connect(int af, char *servip, unsigned short port){
struct sockaddr_in servaddr;
int s;
if((s = socket(af,SOCK_STREAM,0)) < 0)
return -1;
bzero((char *)&servaddr,sizeof(servaddr));
servaddr.sin_family = af;
inet_pton(AF_INET,servip,&servaddr.sin_addr);
servaddr.sin_port = htons(port);
if(connect(s, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
return -1;
return s;
}
//client_arrya값을 화면에 출력(테스트용)
void check_clientarray(struct friends *array){
int i;
for(i = 0 ; i < MAX_CLIENT ; i++)
printf("client_array[%d] name: %s status : %d\n",i,array[i].name,array[i].status);
}
//내용을 출력할 함수
void print_msg(struct friends *me,struct friends *array){
int i;
if(me->status == 1){
printf("현재 내 상태는 - 온라인\n");
}else if(me->status == 2){
printf("현재 내 상태는 - 자리비움\n");
}else if(me->status == 0){
printf("현재 내 상태는 - 오프라인\n");
}else if(me->status == 3){
printf("현재 내 상태는 - 채팅중\n");
}else{
printf("error!!\n");
}
printf("------My friends list------\n");
for(i = 0 ; i < MAX_CLIENT-1 ; i++){
if(array[i].status != 99 && strcmp(me->name,array[i].name) != 0){
if(array[i].status == 1){
printf("%s 는- 온라인 ip: %s\n",array[i].name,array[i].ip);
}else if(array[i].status == 2){
printf("%s 는- 자리비움 ip: %s\n",array[i].name,array[i].ip);
}else if(array[i].status == 0){
printf("%s 는- 오프라인 ip: %s\n",array[i].name,array[i].ip);
}else if(array[i].status == 3){
printf("%s 는- 채팅중 ip: %s\n",array[i].name,array[i].ip);
}
}
}
printf("--------------------------\n");
return;
}
me->status = 0;
}
printf("me->status is %d\n",me->status);
if(write(s,(struct friends*)me,sizeof(struct friends)) < 0){
puts("Error : error on socket");
}
printf("send message!\n");
if(strstr(buf,EXIT_STR) != NULL){
puts("Good bye");
close(s);
exit(0);
}
}else{
printf("입력이 잘못되었습니다. 다시 확인하세요.\n");
}
// 문자열을 입력받았다고 판단
// 친구와 채팅을 하려면 친구 아이디를 입력
// 입력한 아이디가 존재하는 경우 서로
// 채팅을 가능하도록 한다.
} else if(len >= 3){
printf("문자열 입력\n");
chat = 99;
//printf("buf : %s len : %d\n",buf,strlen(buf));
for(k = 0 ; k < MAX_CLIENT ; k++){
if((clientarray[k].status != 99) && (strstr(buf,clientarray[k].name) != NULL)){
chat = k;
break;
}
}
printf("chat is : %d\n",chat);
if(chat != 99){
//올바르게 다른 클라이언트의 이름이 입력되었을때..
//서버에 현재 상태를 바꾸고..
printf("chat: %d, %s\n",chat,clientarray[chat].name);
//상태 바꾸고,채팅 원하는 상대의 이름을 보낸다.
me->status = 3;
sprintf(me->name,"%s",buf);
sprintf(me->port,"%s","7000");
if(write(s,(struct friends*)me,sizeof(struct friends)) < 0){
puts("Error : Write error on socket");
}
//자식프로세스 생성 udp 서버가 된다.
if((pid = fork()) == 0){
if(execl("./udpser","udpser",me->port,(char *)0) < 0)
printf("exec error\n");
}
//부모 프로세스는 자식프로세스가 종료할때까지 기다린다.
else{
if(pid == wait()){
me->status = 1;
printf("argv[3] : %s\n",argv[3]);
sprintf(me->name,"%s",argv[3]);
printf("before parent write\n");
if(write(s,(struct friends*)me,sizeof(struct friends)) < 0){
puts("Error : Write error on socket");
}
printf("after parent write\n");
}
}
}else{
printf("입력이 잘못되었습니다. 다시 확인하세요.\n");
}
}
}
}
}
free(me);
return 0;
}
//서버와 연결해주는 함수 : 반환값 소켓 번호
int tcp_connect(int af, char *servip, unsigned short port){
struct sockaddr_in servaddr;
int s;
if((s = socket(af,SOCK_STREAM,0)) < 0)
return -1;
bzero((char *)&servaddr,sizeof(servaddr));
servaddr.sin_family = af;
inet_pton(AF_INET,servip,&servaddr.sin_addr);
servaddr.sin_port = htons(port);
if(connect(s, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
return -1;
return s;
}
//client_arrya값을 화면에 출력(테스트용)
void check_clientarray(struct friends *array){
int i;
for(i = 0 ; i < MAX_CLIENT ; i++)
printf("client_array[%d] name: %s status : %d\n",i,array[i].name,array[i].status);
}
//내용을 출력할 함수
void print_msg(struct friends *me,struct friends *array){
int i;
if(me->status == 1){
printf("현재 내 상태는 - 온라인\n");
}else if(me->status == 2){
printf("현재 내 상태는 - 자리비움\n");
}else if(me->status == 0){
printf("현재 내 상태는 - 오프라인\n");
}else if(me->status == 3){
printf("현재 내 상태는 - 채팅중\n");
}else{
printf("error!!\n");
}
printf("------My friends list------\n");
for(i = 0 ; i < MAX_CLIENT-1 ; i++){
if(array[i].status != 99 && strcmp(me->name,array[i].name) != 0){
if(array[i].status == 1){
printf("%s 는- 온라인 ip: %s\n",array[i].name,array[i].ip);
}else if(array[i].status == 2){
printf("%s 는- 자리비움 ip: %s\n",array[i].name,array[i].ip);
}else if(array[i].status == 0){
printf("%s 는- 오프라인 ip: %s\n",array[i].name,array[i].ip);
}else if(array[i].status == 3){
printf("%s 는- 채팅중 ip: %s\n",array[i].name,array[i].ip);
}
}
}
printf("--------------------------\n");
return;
}
추천자료
인터넷의 사회적 역기능 -사생활침해와 개인정보 유출을 중심으로-
blog를 이용한 새로운 비지니스 모델
블러그가 우리생활에 미치는 영향
음란물과 음란문화에 관한 고찰
싸이월드 속에 나타난 인간관계 바라보기
사이버 문화와 인터넷 동호회와의 관계
[인터넷중독][청소년인터넷중독][인터넷문화][인터넷]청소년의 인터넷 이용 실태, 인터넷중독...
[연예인 X파일][연예인 엑스파일][X파일][엑스파일]연예인 X파일(엑스파일)의 개념, 연예인 X...
MS사의 독점 (마이크로 소프트)
인터넷 포털산업 구조) 인터넷포털산업의 개념 및 특성과 수익모델
컴퓨터 개인 정보 보안의 중요성
기업경영 사례 - 구글의 경영전략 (Google이란?, Google의 경영특성, Google의 전략)
카카오톡(카톡 : KAKAOTALK) 마케팅 SWOT,4P,STP분석과 CRM 전략분석 및 카카오톡 새로운 마...
소개글