繁体   English   中英

如何在C中的套接字上发送/接收字符串数组

[英]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.

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