[英]How to send/receive array of strings on a socket in C
我試圖通過套接字發送一個字符串數組,並在另一端接收它。
這是我的客戶端(發送數據的一方):
char* client_hello[] =
{
"Type client_hello",
"Version SSLv3.0",
"Session ID 1",
"Random 1as2@3%$h&KF(*)JAGG&(@H%A$D@J*@@",
"Cipher-Suites TLS_RSA_WITH_RC4_128_SHA",
"Compression null(0)"
};
SendBytes = send(sock, client_hello, 6, 0);
這是我的服務器端(接收數據的一方) :
int inMsgLen = recvfrom(clntSock, inMsg, 1024, 0,(struct sockaddr *)&clntAddr, (socklen_t*)&clntAddrLen);
if (inMsgLen < 0) {
//printf("Error in recvfrom() errno=%d\n", errno);
continue;//exit(1);
}else if (inMsgLen > 1024) {
printf("Received message too long (size=%d)\n", inMsgLen);
exit(1);
}else{
printf("Received Message: %s\n", inMsg);
}
inMsg
聲明為char inMsg[1024];
這是服務器端的輸出:
Received Message: +?
我究竟做錯了什么 ? 如何發送/接收整個client_hello數組?
我試圖通過套接字發送一個字符串數組,並在另一端接收它。
但代碼是發送char*
數組的前六個字節(正如WhozCraig在對問題的評論中所提到的):
SendBytes = send(sock, client_hello, 6, 0);
接收方正在讀取指針地址並將它們視為字符串,因此是垃圾。
要糾正,請依次發送每個字符串,但是您需要創建一個協議來定義字符串的開頭和結尾,因為字節是作為流寫入和從套接字讀取的,而不是消息的一些概念。 例如,為每個字符串添加長度前綴(由換行符結束的數字序列將是一個簡單的選項),后跟實際字符串:
18\nSession ID 124\nCompression null(0)0\n
接收端將讀取換行符,將讀取的內容轉換為int
,分配緩沖區以包含字符串(記住空終止符的空間),然后從套接字讀取該數量的char
。 長度為零可用於終止字符串列表的傳輸。
請注意,對send()
的調用可能導致僅發送所請求數據的一部分。 代碼需要通過跟蹤到目前為止發送的字節數並將索引編入正在發送的緩沖區來滿足此要求。
如果您嘗試進行循環,使用“for”發送...也許可以讓服務器理解。 制作client_hello [i],逐行..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.