select공부중인데...어디가 잘못된건가요??
글쓴이: ch0nn0m / 작성시간: 금, 2009/08/28 - 1:01오후
접속까지는 잘 되는데...메시지를 주고 받지 못하네요...
어디가 잘못된건가요??
서버
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/time.h>
#include<sys/socket.h>
#include<netinet/in.h>
#define PORT 8888
#define BUFSIZE 128
int main(int argc, char **argv)
{
int serv_sock;
struct sockaddr_in serv_addr;
fd_set reads, temps;
int fd_max;
char message[BUFSIZE];
int str_len;
struct timeval timeout;
if(argc !=1 ) {
printf("Usage : %s \n", argv[0]);
exit(1);
}
serv_sock=socket(PF_INET, SOCK_STREAM, 0);
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)))
{
printf("bind() error\n");
exit(1);
}
if(listen(serv_sock,5)==-1)
{
printf("listen() error\n");
exit(1);
}
FD_ZERO(&reads);
FD_SET(serv_sock,&reads);
fd_max=serv_sock;
while(1)
{
int fd, str_len;
int clnt_sock, clnt_len;
struct sockaddr_in clnt_addr;
temps=reads;
timeout.tv_sec=5;
timeout.tv_usec=0;
if(select(fd_max+1, &temps, 0,0, &timeout)==-1)
{
printf("select() error\n");
exit(1);
}
for(fd=0; fd<fd_max+1; fd++)
{
if(FD_ISSET(fd,&temps))
{
if(fd==serv_sock)
{
clnt_len=sizeof(clnt_addr);
clnt_sock=accept(serv_sock,(struct sockaddr *)&clnt_addr, &clnt_len);
FD_SET(clnt_sock,&reads);
if(fd_max<clnt_sock)
fd_max=clnt_sock;
printf("클라이언트 연결 : 파일디스크립터 %d \n", clnt_sock);
}
else
{
str_len=read(fd,message,BUFSIZE);
if(str_len=0)
{
FD_CLR(fd,&reads);
close(fd);
printf("클라이언트 종료 : 파일디스크립터 %d\n", fd);
}
else
{
write(fd,message, str_len);
}
}
}
}
}
}클라이언트
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#define PORT 8888
#define BUFSIZE 128
int main(int argc, char **argv)
{
int sock;
char message[BUFSIZE];
int str_len;
struct sockaddr_in serv_addr;
if(argc !=2)
{
printf("Usage : %s <IP>\n",argv[0]);
exit(1);
}
sock=socket(PF_INET, SOCK_STREAM, 0);
if(sock==-1)
{
printf("socket() error\n");
exit(1);
}
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)
{
printf("connect() error\n");
exit(1);
}
while(1)
{
fputs("전송할 메시지를 입력하세요 (q to quit) : ", stdout);
fgets(message, BUFSIZE, stdin);
if(!strcmp(message, "q\n"))
break;
write(sock, message, strlen(message));
str_len=read(sock, message, BUFSIZE-1);
message[str_len]=0;
printf("서버로부터 전송된 메시지 : %s\n",message);
}
close(sock);
return 0;
}Forums:


if(str_len=0)
if(str_len == 0) 여야...
근데 이거 책에 나온 예제 소스 맞죠?
변수명까지 눈에 익다는 ㅡㅡa
----------------------
Go to the U-City
----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------
댓글 달기