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