1.将文件夹.h和.c文件放在同一路径下
2.编译.c文件
编译之前,将client.c中的ip设置为arm上的ip地址 10.0.0.2
gcc -Wall -o TCPClient TCPClient.c 编译出来的文件放在PC端
arm-linux-gnueabi-gcc TCPServer.c -o TCPServer.out 再用交叉编译,将.OUT文件放入arm板中
3.启动qemu(挂载报错要先关闭客户端防火墙 systemctl stop firewalld)
./start_mesh.sh
ifconfig eth0 10.0.0.2
mount -t nfs -o proto=tcp,nolock 10.0.0.1:/home/xyk/arm/rootfs/mnt /mnt
cd /mnt
./TCPServer.out
4.启动client
./TCPClient
2.利用socket进行文件传输
1.创建一个send.txt文件,内容为123
2.修改服务端和客户端的代码
服务端代码
//服务端
#include "SocketHeader.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
int main(void) {
struct sockaddr_in local, peer;
int s, s1;
int rc;
char buffer[BUFFER_SIZE];
local.sin_family = AF_INET;
local.sin_port = htons(12345);
local.sin_addr.s_addr = htonl(INADDR_ANY);
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0)
print_error("socket");
rc = bind(s, (struct sockaddr*)&local, sizeof(local));
if (rc < 0)
print_error("bind");
rc = listen(s, 5);
if (rc < 0)
print_error("listen");
printf("等待客户端连接...\n");
s1 = accept(s, NULL, NULL);
if (s1 < 0)
print_error("accept");
printf("客户端已连接\n");
// 创建文件来保存接收到的数据
FILE *file = fopen("received_file.txt", "wb");
if (file == NULL) {
perror("Error opening file");
return 1;
}
// 接收文件内容并保存到文件
while (1) {
rc = recv(s1, buffer, BUFFER_SIZE, 0);
if (rc <= 0)
break;
size_t bytesWritten = fwrite(buffer, 1, rc, file);
if (bytesWritten != rc) {
perror("Error writing to file");
break;
}
}
// 关闭文件和套接字
fclose(file);
close(s1);
close(s);
return 0;
}
客户端代码
#include "SocketHeader.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFER_SIZE 1024
int main(void) {
struct sockaddr_in peer;
int s;
int rc;
char buffer[BUFFER_SIZE];
peer.sin_family = AF_INET;
peer.sin_port = htons(12345);
peer.sin_addr.s_addr = inet_addr("10.0.0.2");
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0)
print_error("socket");
rc = connect(s, (struct sockaddr*)&peer, sizeof(peer));
if (rc)
print_error("connect");
FILE *file = fopen("send.txt", "rb");
if (file == NULL) {
perror("Error opening file");
return 1;
}
while (1) {
size_t bytesRead = fread(buffer, 1, BUFFER_SIZE, file);
if (bytesRead <= 0)
break;
// 发送文件内容
rc = send(s, buffer, bytesRead, 0);
if (rc <= 0)
print_error("send");
}
// 关闭文件和套接字
fclose(file);
close(s);
return 0;
}
然后启动即可