【发布时间】:2022-01-23 03:32:19
【问题描述】:
我有一个帐户结构(如银行帐户),我想在应用程序启动时写“状态”时将帐户信息发送给客户端:./client state 然后服务器必须发送信息客户端,但是我在使用 fwrite 函数发送结构时遇到问题,
我已经在我的服务器上实现了这个。c
...
if(strcmp(buffer, "state") == 0) {
printf("sending the state of account...\n");
memcpy(buffer, &a1, sizeof(a1));
printf("%s\n", buffer);
size_t nb_write = fwrite(buffer, sizeof(char), sizeof(MAX_BUFF), client_array[0].file);
printf("number i write: %ld\n", nb_write);
if(fflush(client_array[0].file)){
syserr("error of fflush");
}
}
在我的 client.c 上我写了这个:
...
if(argc > 1){
printf("argv[1]: %s\n", argv[1]);
size_t nb_write = fwrite(argv[1], sizeof(*argv), strlen(argv[1]), fdc);
printf("number i write: %ld\n", nb_write);
if(fflush(fdc)){
syserr("fflush");
}
}
size_t nbread = fread(&buffer, strlen(buffer), sizeof(BUFF_SIZE), fdc); // reception of structure
printf("number i read: %ld\n", nbread);
printf("%s\n", buffer);
应用客户端正在等待 fread()
./server的输出:
number i read: 4
state
sending the state of account...
account 1
number i write: 4
error of fflush: Illegal seek
当我按 CTRL-C 停止服务器时,应用程序客户端写了一些奇怪的东西(可能是缓冲区的内容)并且应用程序也停止了。
Socket creation successful
Connection successful !
argv[1]: state
number i write: 5
number i read: 0
��E-�
这里是我要发送的结构:
struct account{
char title[MAX_TITLE_LENGTH];
struct user list_user[MAX_LIST_SIZE];
// char description[140]; // for example hotel, market, travel
int32_t total;
};
struct account a1;
/* ACCOUNT */
strcpy(a1.title, "account 1");
a1.list_user[0] = u1;
a1.total = 0.0;
如何修复它以在客户端的 fd 上正确发送结构并在客户端的缓冲区中读取它
【问题讨论】:
标签: c sockets server tcp client