Linux プラットフォームで RIL コードのレイヤーを正常にコンパイルしており、既に実行されています。RIL はサーバーと同様に、ソケットを介してクライアントと通信します。今、私はクライアントを書きました。クライアントはサーバーを正常にバインドできますが、クライアントがデータを RIL サーバーに書き込んだときに間違っていました。RIL サーバーがクラッシュしました。クライアントのデータ形式が正しくなく、サーバーがデータを分析できないと思います。ソケットからサーバーにデータを送信するときに、クライアントのデータ形式を整理するにはどうすればよいですか?
ちなみに、RIL コード、特に [processCommandsCallback] 関数は変更していません。Parcell.cpp の BINDER を削除し、残りは保持します。
クライアントのデーモン コードは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#define UNIX_DOMAIN "/tmp/msg_server_addr"
#define RIL_REQUEST_ANSWER 40
struct parcel
{
int requestID;
int token;
char data[10];
};
int main(void)
{
int connect_fd;
struct sockaddr_un srv_addr;
p.requestID = RIL_REQUEST_ANSWER;
p.token= 1;
strcpy(p.data,"");
if( (connect_fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
{
perror("client create socket failed");
return 1;
}
srv_addr.sun_family = AF_UNIX;
strcpy(srv_addr.sun_path, UNIX_DOMAIN);
ret = connect(connect_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));
write(connect_fd, (void *)&p, sizeof(p));
close(connect_fd);
}