繁体   English   中英

通过TCP连接使用Berkeley套接字传输可变结构大小

[英]Transmitting variable structure size with Berkeley socket over a TCP connection

我在C中定义了以下结构,我想使用Berkeley Socket通过Linux中客户端与服务器之间的TCP连接发送它:

struct Argument{
int pid;
int length;
chat op;
char *data;
};

由于我有一个“ char * data”,它是一个指针,可以用于在本地发送机中分配可变大小的数据,因此我必须在两个不同的时间将该结构发送到接收方。 第一次,我只发送固定变量,即前三个变量。 然后在接收时,我分配一个具有长度大小的缓冲区以第二次接收数据部分。

所以我的问题是,无论如何,该结构只能以可变的数据字段大小一次向另一侧发送此结构,而不是我在做什么的两倍?

if (write(peer_fd, (struct Argument*) arg, sizeof (struct Argument)) < 0)
{
    close(peer_fd);
    return -1;
}

非常感谢。

考虑使用分散聚集读写技术。

阅读v写v

wtitev允许您在单个调用中从多个缓冲区(固定大小的标头和char数组)进行写入。 您要承担单个系统调用的费用,内核中的套接字代码将数据组装到单个缓冲区(如果可能)中,并进行单个网络调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM