C语言将动态二维字符数组通过socket发送并接收,给出具体代码
时间: 2024-01-11 08:02:01 浏览: 71
以下是一个简单的示例代码,用于通过socket发送和接收C语言中的动态二维字符数组:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define PORT 8888
int main() {
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
printf("Failed to create socket");
return 1;
}
struct sockaddr_in server;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror("Connection failed");
return 1;
}
int rows = 3;
int cols = 4;
int i, j;
// Allocate memory for the dynamic array
char **arr = malloc(rows * sizeof(char *));
for (i = 0; i < rows; i++) {
arr[i] = malloc(cols * sizeof(char));
for (j = 0; j < cols; j++) {
arr[i][j] = 'a' + i * j;
}
}
// Send the array dimensions
int dim[2] = {rows, cols};
send(sock, dim, 2 * sizeof(int), 0);
// Send the array data
for (i = 0; i < rows; i++) {
send(sock, arr[i], cols * sizeof(char), 0);
}
// Receive the array dimensions
int rdim[2];
recv(sock, rdim, 2 * sizeof(int), 0);
// Allocate memory for the received array
char **rarr = malloc(rdim[0] * sizeof(char *));
for (i = 0; i < rdim[0]; i++) {
rarr[i] = malloc(rdim[1] * sizeof(char));
}
// Receive the array data
for (i = 0; i < rdim[0]; i++) {
recv(sock, rarr[i], rdim[1] * sizeof(char), 0);
}
// Print the received array
printf("Received array:\n");
for (i = 0; i < rdim[0]; i++) {
for (j = 0; j < rdim[1]; j++) {
printf("%c ", rarr[i][j]);
}
printf("\n");
}
// Free memory
for (i = 0; i < rows; i++) {
free(arr[i]);
}
free(arr);
for (i = 0; i < rdim[0]; i++) {
free(rarr[i]);
}
free(rarr);
close(sock);
return 0;
}
```
上述代码通过socket发送和接收一个3x4的二维字符数组。该代码分为以下几个步骤:
1. 创建一个socket连接。
2. 分配动态二维字符数组并用数据填充它。
3. 发送数组的维度和数据。
4. 接收数组的维度和数据。
5. 打印接收到的数组。
6. 释放分配的内存并关闭socket连接。
在发送数组之前,先通过send函数发送数组的维度,即行数和列数。这里使用了一个整数数组来存储维度,然后将它发送到socket上。
接下来,通过for循环,使用send函数逐行发送数组数据。在接收数据时,首先使用recv函数接收数组维度,然后分配内存以存储接收到的数组数据。最后,使用recv函数逐行接收数据,并使用printf函数打印接收到的数组。
需要注意的是,由于动态数组的内存分配是通过malloc函数进行的,因此在使用完数组后,需要使用free函数释放分配的内存。
阅读全文