sendto(listener_socket,<This is a char *> , strlen(my_message), 0, (struct sockaddr *)&nbaddr, sizeof(nbaddr)
不,这不是,这是一个const void *
。从a man page:
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
从技术上讲,你可以用你的发送结构:&selfRoutingTable
和使用sizeof
的大小,但请参见下文。
由于EJP提到这是一个非常糟糕的主意,你会很快与不同的实现结构的表示和领域遇到的问题(你会发现所有关于结构场填补之类)。
查看序列化机制(json,capnproto,protobufs,xml,asn.1什么)。
我现在认识到,“不,它不是”并非总是如此。显然MSDN lists sendto as taking a const char *
。
int sendto(
_In_ SOCKET s,
_In_ const char *buf,
_In_ int len,
_In_ int flags,
_In_ const struct sockaddr *to,
_In_ int tolen
);
想法(将指针传递给任何人想要的)的立场。
错误,带有一个强制转换,'sizeof'而不是'strlen()',但是你不应该这样做。不要使用结构作为网络协议。 – EJP