Я реализую как серверную, так и клиентскую часть простой программы загрузки файлов.Клиентская сторона запрашивает имена файлов с сервера с помощью команды get, и сервер быстро отвечает.Пока сервер пишет в сокет, клиенты читают сокет и распечатывают буфер.После этого программа начинает не интерпретировать мои команды, если я не нажму «Enter» дважды. (Вы можете увидеть это из вывода Shell ниже)
После отладки я обнаружил, что это из-за размера буфера.При записи сервера в сокет;все работает правильно, если я использую небольшой размер буфера.Но если я использую больший размер буфера, например 1024, эта проблема возникает.Как я могу избавиться от этой проблемы?
#define F_BUFF_SIZE 1024
На стороне сервера:
/* ... */
if(!strcmp(buffer, "list\n")) {
char buff[F_BUFF_SIZE];
bzero(buff, F_BUFF_SIZE);
pt_ret = pthread_create(&thread_id, NULL, getfiles, (void*) buff);
pthread_join(thread_id, pt_ret);
n = write(sock, buff, F_BUFF_SIZE);
/* ... */
На стороне клиента:
/* ... */
char buffer[F_BUFF_SIZE];
bzero(buffer, F_BUFF_SIZE);
n = read(b_sock, buffer, F_BUFF_SIZE - 1);
if (n < 0) {
#ifdef _DEBUG_
fprintf(stderr, "Error: Could not read from the socket.\n");
#endif
return 0;
}
fputs(buffer, stdout);
/* ... */
Оболочка:
Opening socket: OK!
Connecting: OK!
# list
client
project1.mk
cs342.workspace
client.c
project1.project
cs342.workspace.session
server
cs342_wsp.mk
server.c
cs342.tags
# get
# take
get
# take
Unknown command.
...