每次循环时它都会卡住。它坐着等待阅读,但从未读过任何东西,因为,好吧......没有什么可读的了。
这是读取功能:
int readSocket(int sockfd, char* buffer) {
FILE* file;
file = fopen("logfile.txt","a+");
char code[5];
while(1) {
int nBytes = read(sockfd, buffer, MY_BUFFER_SIZE);
fprintf(file,"S->C: %s",buffer);
strncpy(code, buffer,4);
code[4]='\0';
if (nBytes == 0) break;
memset(buffer, 0, MY_BUFFER_SIZE);
}
fclose(file);
return codeParser(atoi(code));
}
这就是所谓的:
while (1) {
serverCode = readSocket(sockfd, mybuffer);
if (serverCode == 221) break;
fflush (stdout);
buffer = fgets (mybuffer, 1024, stdin);
writeSocket(sockfd, mybuffer);
}
有什么建议吗?
答案 0 :(得分:8)
TCP套接字是双向流。它不知道您的消息边界。您需要在TCP之上使用自己的协议来计算单独的消息。 Two 三种常见的方法是:
\0x1
等等(谢谢,@ caf)。关于您的代码的一些注意事项:
read(2)
。首先,它可能是-1
,即错误,因此您必须检查errno(3)
;第二,你可能会读到你期望的不到4个字节。nBytes == 0
是EOF
案例,意味着另一方关闭了连接。memset()
那里。