米尔小助手1 发表于 2023-6-12 18:03:10

【米尔瑞萨RZ/G2L开发板-试用体验】TCP服务器

创建tcp服务在虚拟机上新建tcp_server.c:#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <pthread.h>

#define SERVER_PORT 3861
#define LISENT_NUM 10

int main(int argc, char * argv[])
{
    int sfd, cfd;
    struct sockaddr_in clientaddr;
    struct sockaddr_in serverAddr;
    char buff;
    int size = sizeof(struct sockaddr);
    pthread_t client_thread;

    if((sfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
      perror("socket");
      exit(-1);
    }

    memset(&serverAddr, 0, sizeof(struct sockaddr));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = INADDR_ANY;
    serverAddr.sin_port = htons(SERVER_PORT);

    if (bind(sfd, (struct sockaddr*)&serverAddr, sizeof(struct sockaddr)) == -1)
        {
                perror("bind");
                close(sfd);
                exit(-1);
    }
    if(listen(sfd, LISENT_NUM) == -1)
    {
      perror("listen");
      close(sfd);
      exit(-1);
    }

    printf("#@ listen SERVER_PORT %d\n", SERVER_PORT);
    printf("main: server waiting connect...\n");

    if ((cfd = accept(sfd, (struct sockaddr *)&clientaddr, (socklen_t*)&size)) == -1)
        {
                perror("accept");
                close(sfd);
                return0;
        }
    printf("client (ip = %s : SERVER_PORT = %d) connect success\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));

    while (1)
    {
      usleep(1000*10);
      if (send(cfd, "hello MYD/YG2L", 6, MSG_NOSIGNAL) == -1)
      {
            perror("send");
            exit(-1);
      }
      printf("send: hello MYD/YG2L\n");
      usleep(1000*10);
      if(recv(cfd, buff, sizeof(buff), 0) == -1)
      {
            perror("recv");
            exit(-1);
      }
      printf("receive: %s\n", buff);
    }
    return0;

}

[*]加载sdk:source /opt/yg2lx/environment-setup-aarch64-poky-linux
[*]编译:

lugl@lugl-virtual-machine:~/MYDG2L$ source /opt/yg2lx/environment-setup-aarch64-poky-linux
lugl@lugl-virtual-machine:~/MYDG2L$ $CC tcp_server.c -o tcp_server
In file included from /opt/yg2lx/sysroots/aarch64-poky-linux/usr/include/bits/libc-header-start.h:33,
               from /opt/yg2lx/sysroots/aarch64-poky-linux/usr/include/stdio.h:27,
               from tcp_server.c:1:
/opt/yg2lx/sysroots/aarch64-poky-linux/usr/include/features.h:397:4: warning: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Wcpp]
#warning _FORTIFY_SOURCE requires compiling with optimization (-O)
    ^~~~~~~
lugl@lugl-virtual-machine:~/MYDG2L$ ls
tcp_servertcp_server.c
lugl@lugl-virtual-machine:~/MYDG2L$ file tcp_server
tcp_server: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-aarch64.so.1, for GNU/Linux 3.14.0, BuildID=c81069580d81fc0f4ac9bb00ecdd7ddf822e251f, with debug_info, not stripped


[*]上传开发板,修改执行权限后运行:

root@myir-yg2lx:~# chmod 777 tcp_server
root@myir-yg2lx:~# ./tcp_server
#@ listen SERVER_PORT 3861
main: server waiting connect...
client (ip = 192.168.3.166 : SERVER_PORT = 53634) connect success
send: hello MYD/YG2L
receive: hello
send: hello MYD/YG2L
receive: hello
send: hello MYD/YG2L
receive: hello MYD
send: hello MYD/YG2L


[*]打开TCP调试工具,连上服务器:
https://file1.elecfans.com/web2/M00/88/C3/wKgZomRxVSaAPcc8AAE326jptx0868.png



发送数据后,服务器打印出接收到的数据,客户端也接收到数据。

李俊 发表于 2023-6-13 14:09:38

这个比较好玩

bin 发表于 2023-8-3 11:25:59

已验证,send: hello MYD/YG2L,只能收到hello,send(cfd, "hello MYD/YG2L", 6, MSG_NOSIGNAL),6要改下
页: [1]
查看完整版本: 【米尔瑞萨RZ/G2L开发板-试用体验】TCP服务器