我正在用 C 语言编写一个可移植的应用程序,它应该可以在 mac 和 windows 上运行,我正在编写的套接字代码是使用 windows 上的 POSIX 套接字 Winsock api 具有类似的功能。
服务器是用java编写的,这是一个客户端应用程序,它连接到服务器然后进行通信,
我需要编写一个 readline 函数,就像我们在 C# 或 Java 中读取由换行符终止的行一样。
我目前正在使用以下功能,但我认为这不是非常有效的方法,因为我正在逐字阅读
//return number of bytes read or -1 on error
int readline(SOCKET s, char* pResponse)
{
char c = '0';
int status = 0;
int i = 0;
while(true)
{
status = recv(s,&c, 1,0);
if(status == SOCKET_ERROR)
{
//socket error
return -1;
}
else if(status == 0)
{
//closed ?
return -1;
}
else if(status > 0)
{
pResponse[i] = c;
i++;
if(c == '\n' || c == '\r\n')
{
break;
}
}
}
return i;
}
发送方/服务器将只发送这一行并等待来自客户端的响应,因此我们可以假设读取整个套接字数据是可以的
那么我可以写这个比这个更好吗?逐字符读取是性能问题吗?任何帮助,将不胜感激。