我正在使用WinSock,我需要发送一个2D char数组。 例如
char SendBuf[10][1024];
for (int i = 0; i < 10; i++){
fgets(SendBuf[i], sizeof(SendBuf), stdin);
}
并将其转换为(char *)。
iResult = sendto(SendSocket, (char*)SendBuf, BufLen, 0, (SOCKADDR *)& RecvAddr, sizeof(RecvAddr));
一切正常。但是在服务器端我只得到Sendbuf [0] [1024]的值,我该怎么做才能读取整个缓冲区。
答案 0 :(得分:1)
应该使用:
const int Buflen = 10*1024;
并注意字符串N将位于RecBuf [N * 1024]
位置答案 1 :(得分:0)
我还不能在这里发表评论,但看看你的最后评论,我认为你的BufLen就是问题所在。如果您只发送1024个字节,那么这就是您只接收1024个字节的原因。你需要你的BufLen为10 * 1024 * 1.
“char SendBuf [10] [1024]”将是10个大小为1024 * sizeof(char)端口到端的字符串数组...在内存中一个接一个地。因此,它的总大小将为10 * 1024 * sizeof(char)
如果你看一下http://msdn.microsoft.com/en-us/library/windows/desktop/ms740148%28v=vs.85%29.aspx的示例winsock代码,它会使用:
char SendBuf[1024];
int BufLen = 1024;
这可以想象为:
char SendBuf[1][1024];
int BufLen = 1*1024;
这可能会让人们更容易看到这些数组的大小如何。