[英]How can I better read my socket?
每次循环时它都会卡住。 它坐着等待阅读,但从未读过任何东西,因为,好吧......没有什么可读的了。
这是读取功能:
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);
}
有什么建议么?
TCP套接字是双向流。 它不知道您的消息边界。 您需要在TCP之上使用自己的协议来计算单独的消息。 二 三种常见方法是:
\\0x1
等等(谢谢,@ cdf)。 关于代码的一些注意事项:
read(2)
。 首先,它可能是-1
,即错误,所以你必须检查errno(3)
; 第二,你可能会读到你期望的不到4个字节。 nBytes == 0
是EOF
情况,意味着另一方关闭了连接。 memset()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.