1

iOS CFSocket では、コールバック関数を処理する方法は次のとおりです。

      void receiveData(CFSocketRef s, 
                         CFSocketCallBackType type, 
                         CFDataRef address, 
                         const void *data, 
                         void *info)
{

}


int main ()
{
    CFSocketRef s = CFSocketCreate(NULL, PF_INET, 
                                            SOCK_STREAM, IPPROTO_TCP, 
                                            kCFSocketDataCallBack, 
                                            receiveData, 
                                            NULL);
    struct sockaddr_in      sin; 
    struct hostent           *host;

    host = gethostbyname("localhost");      
    memset(&sin, 0, sizeof(sin));
    memcpy(&(sin.sin_addr), host->h_addr,host->h_length); 
    sin.sin_family = AF_INET;
    sin.sin_port = htons(888);

    CFDataRef address, data;
    UInt8 message[] = "Hello world";
    CFRunLoopSourceRef source;

    address = CFDataCreate(NULL, (UInt8 *)&sin, sizeof(sin));
    data = CFDataCreate(NULL, message, sizeof(message));

    CFSocketConnectToAddress(s, address, 0);
    CFSocketSendData(s, NULL, data, 0);

}

CFSocket では、CFSocketCreate を実行するときに、コールバック関数を SocketCreate 関数に入れます。

ただし、C コードの場合、Socket と Socket からの読み取りは次のとおりです。

 sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
    error("ERROR connecting");
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0) 
     error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);

Cコード内にコールバック読み取り関数を実装する方法がわかりません。コールバック関数は、何かがバッファに入るたびに実装されます。

4

1 に答える 1