0

私はcppにかなり慣れていません。sock_stream 経由でデータを受信できるようにしたいと考えています。SocketInfo->DataBuf.buf から受信したデータを、プログラムの開始時に初期化された char recvArray[1024] バッファーに渡したい。recvArray[] から数値をチェック/解析して組み立てる必要があります。このコピーを機能させるにはどうすればよいですか? 私が試したいくつかのことは、「char*からcharへの変換が無効です」というコンパイラエラーを取得します

//check sockets for for read or write notification
for(int i=0; Total>0 && i<TotalSockets; i++){
    LPSOCKET_INFORMATION SocketInfo = SocketList[i];

    //check if data incomming on each socket
    if( FD_ISSET(SocketInfo->Socket, &Reader)){
        Total--;
        SocketInfo->DataBuf.buf = SocketInfo->Buffer;
        SocketInfo->DataBuf.len = BUFFERSIZE;
        Flags = 0;
        //receive data
        SocketInfo->RecvBytes = sizeof(SocketInfo->DataBuf);
        check = WSARecv(SocketInfo->Socket, &(SocketInfo->DataBuf), 1, &(SocketInfo->RecvBytes), &Flags, NULL, NULL);
        //error checking
        if( check == SOCKET_ERROR){
            if( WSAGetLastError() != WSAEWOULDBLOCK){
                printf("base station client receive failed with error %d \n", WSAGetLastError());
                FreeSocketInformation(i); //shuts down client socket if no data
            }
            continue;
        }
        else{
            //receive bytes into array

            //print received bytes on screen
            printf("%s \n", SocketInfo->DataBuf.buf);
            //otherwise deal with data
            //need to copy to recvArray

            //if no bytes received then connection is closed.
            if( SocketInfo->RecvBytes == 0){
                FreeSocketInformation(i); //shuts down client socket if no data
                continue;
            }
        }
    } //end of read data from socket
}
4

1 に答える 1

0
//recieve data
SocketInfo->RecvBytes = sizeof(SocketInfo->DataBuf);
check = WSARecv(SocketInfo->Socket, &(SocketInfo->DataBuf), 1, &(SocketInfo->RecvBytes), &Flags, NULL, NULL);

タイプ WSABUF の新しい変数を宣言してみてください。

WSABUF tempDataBuf;
check = WSARecv(SocketInfo->Socket, &(tempDataBuf), 1, &(SocketInfo->RecvBytes), &Flags, NULL, NULL);
 SocketInfo->DataBuf = tempDataBuf;
于 2012-12-13T08:39:58.277 に答える