Mac と Windows で動作するはずの C 言語でポータブル アプリケーションを作成しています。私が作成しているソケット コードは POSIX ソケットを使用しています。Windows の Winsock API には同様の機能があります。
サーバーはJavaで書かれており、これはサーバーに接続して通信するクライアントアプリケーションです。
改行文字で終了する行を読み取る C# や Java と同じように、readline 関数を作成する必要があります。
現在、次の関数を使用していますが、文字ごとに読んでいるため、非常に効率的な方法ではないと思います
//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;
}
送信者/サーバーはこの行のみを送信し、クライアントからの応答を待つため、ソケット データ全体を読み取っても問題ないと想定できます。
では、これをこれよりもうまく書くことができますか? 文字ごとの読み取りはパフォーマンスの問題ですか? 任意の助けをいただければ幸いです。