리눅스 c 소켓 방식 텍스트 값 읽기
서버에서 data.txt파일을 읽어 들여서
클라이언트에서 볼수 있게 하고 싶은데
파일을 read해서 버퍼에 어떻게 쓰는지를 잘 모르겠습니다.
컴파일은 되는데 클라언트서 보면 빈 글자만 보이네요..
#include
#include
#include
#include
#include
#include
#define PORT 9000
int main(void)
{
int c_socket, s_socket;
struct sockaddr_in s_addr, c_addr;
:
int len;
int n;
char buffer[BUFSIZ];
int fd=open("data.txt",O_RDWR);
write(fd,buffer,strlen(buffer));
s_socket = socket(PF_INET, SOCK_STREAM, 0);
memset(&s_addr,0,sizeof(s_addr));
s_addr.sin_addr.s_addr=htonl(INADDR_ANY);
s_addr.sin_family=AF_INET;
s_addr.sin_port=htons(PORT);
if(bind(s_socket, (struct sockaddr *) &s_addr, sizeof(s_addr)) == -1)
{
printf("Can not Bind\n");
return -1;
}
if(listen(s_socket,5)==-1)
{
printf("listen Fail\n");
return -1;
}
while(1)
{
len=sizeof(c_addr);
c_socket = accept(s_socket, ( struct sockaddr *) &c_addr, &len);
n=strlen(buffer);
write(c_socket, buffer, n);
close(c_socket);
}
close(s_socket);
}
int
파일열고, data.txt에서 읽은게 아니라, 해당 fd에다가 쓰셨으니.. ㅡㅡ;;
read를 하시고 싶으셨던게 아닌지요?
時日也放聲大哭
일단 먼저 에코서버와 클라이언트를
일단 먼저 에코서버와 클라이언트를 작성하신다음에
버퍼에 파일에서 읽은내용을 넣으시면될것같습니다.
#include
FILE *fopen(const char *path, const char *mode);
우리 모두 힘냅시다!!
수정했는데
고친다고 고쳤는데 여전히
클라이언트 실행하면 아무것도 안뜨네요.. ㅠ
int main(void)
{
int c_socket, s_socket;
struct sockaddr_in s_addr, c_addr;
int len;
int n;
char buffer[BUFSIZ];
int fd=open("data.txt",O_RDWR);
read(fd,buffer,strlen(buffer));
write(s_socket,buffer,strlen(buffer));
s_socket = socket(PF_INET, SOCK_STREAM, 0);
memset(&s_addr,0,sizeof(s_addr));
s_addr.sin_addr.s_addr=htonl(INADDR_ANY);
s_addr.sin_family=AF_INET;
s_addr.sin_port=htons(PORT);
if(bind(s_socket, (struct sockaddr *) &s_addr, sizeof(s_addr)) == -1)
{
printf("Can not Bind\n");
return -1;
}
if(listen(s_socket,5)==-1)
{
printf("listen Fail\n");
return -1;
}
while(1)
{
len=sizeof(c_addr);
c_socket = accept(s_socket, ( struct sockaddr *) &c_addr, &len);
n=strlen(buffer);
write(c_socket, buffer, n);
close(c_socket);
}
close(s_socket);
}
이부분 에러 안나나요?
write(s_socket,buffer,strlen(buffer));
fd 값은 -1 로 초기화 해주셔서 쓰셔야합니다.
Too Many Sceret is in your heart.
We must break it and don't forget it.
Until no more secret remains in your soul
read(fd,buffer,strlen(buffer)
read(fd,buffer,strlen(buffer));
에서 segfault 가 나지 않은게 불행의 시작이죠.
이 리플에 엄청..
맘이 동하고 있습니다.
추천 드리고 싶네요. ㅎ
마치 쪽지시험 같은.
accept()는 루프에 돌릴필요없어요.
댓글 달기