옵션 |
|
tcp/ip 소켓프로그래밍에 관하여 도움 부탁드립니다.
ftp 클라이언트와 서버를 만들고 있는 와중에 클라이언트의 ls 요청에 서버가 현재 디렉토리 목록을 클라이언트에게 보내는 부분에서 계속해서 오류가 발생합니다.
클라이언트의 해당 함수 소스 입니다.
void FileListShow(int sock)
{
uint8_t msgType = FileList;
ssize_t numBytesSent = send(sock, &msgType, sizeof(msgType), 0);
if (numBytesSent == -1) {
printf("send() error");
exit(1);
}
else if (numBytesSent != sizeof(msgType)) {
printf("sent unexpected number of bytes");
exit(1);
}
int n, len;
char *temp;
int length = 0;
char rcvBuffer[BUFSIZE];
temp = rcvBuffer;
while ((n = read(sock, temp, 1)) > 0)
{
if (length == BUFSIZE)
break;
temp++;
length++;
}
rcvBuffer[length] = '\0';
printf("received Data : %s\n", rcvBuffer);
close(sock);
}
서버의 해당 함수 소스 코드입니다.
void FileListShow(int clnt_sock)
{
DIR *dp;
struct dirent *dir;
dp = opendir( ".");
if (NULL != dp)
{
while (dir = readdir(dp))
{
if (dir->d_ino == 0)
{
break;
}
send(clnt_sock, dir->d_name, strlen(dir->d_name), 0);
send(clnt_sock, " ", 1, 0);
}
}
closedir(dp);
}
함수의 매개변수는 각 각 파일 디스크립터입니다.
실행하여 클라이언트에서 ls 를 입력시 서버, 클라이언트 둘다 반응이 없다가 서버를 강제 종료시키면 그제서야 클라이언트에서 파일 목록이 나타납니다. 어느 부분때문에 무한루프? 같은것에 빠지는것 같은데 그 원인을 모르겠습니다