SOCKET配置

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;
}

然后启动即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值