1087|2

6110

帖子

4

TA的资源

版主

楼主
 

【 正点原子瑞芯微RV1126测评】6 socket服务器和客户端编程 [复制链接]

 
本帖最后由 damiaa 于 2024-2-23 09:01 编辑
正点原子瑞芯微RV1126测评】6 socket服务器和客户端编程
 
 
 

一、连接好网络并检查rv1126板子和电脑是否能ping

二、socket服务器程序和 编译的sh代码
socket_server.sh

/opt/atk-dlrv1126-toolchain/bin/arm-linux-gnueabihf-gcc -o socket_server socket_server.c
chmod +x socket_server
cp socket_server /mnt/hgfs/share/


socket_server.c


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define SERVER_PORT     8888    

int main(void)
{
    struct sockaddr_in server_addr = {0};
    struct sockaddr_in client_addr = {0};
    char ip_str[20] = {0};
    int sockfd, connfd;
    int addrlen = sizeof(client_addr);
    char recvbuf[512];
    int ret;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (0 > sockfd) {
        perror("socket error");
        exit(EXIT_FAILURE);
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(SERVER_PORT);

    ret = bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    if (0 > ret) {
        perror("bind error");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    ret = listen(sockfd, 50);
    if (0 > ret) {
        perror("listen error");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    connfd = accept(sockfd, (struct sockaddr *)&client_addr, &addrlen);
    if (0 > connfd) {
        perror("accept error");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    printf("receive client...\n");
    inet_ntop(AF_INET, &client_addr.sin_addr.s_addr, ip_str, sizeof(ip_str));
    printf("client IP addr: %s\n", ip_str);
    printf("client PORT: %d\n", client_addr.sin_port);
    for ( ; ; ) {
    	memset(recvbuf, 0x0, sizeof(recvbuf));
        ret = recv(connfd, recvbuf, sizeof(recvbuf), 0);
        if(0 >= ret) {
            perror("recv error");
            close(connfd);
            break;
        }
        printf("from client: %s\n", recvbuf);
        if (0 == strncmp("exit", recvbuf, 4)) {
            printf("server exit...\n");
            close(connfd);
            break;
        }
    }
	close(sockfd);
    exit(EXIT_SUCCESS);
}

三、在当前目录运行./ socket_server.sh编译出socket_server

四、socket客户端程序和编译的sh代码
socket_client.sh

/opt/atk-dlrv1126-toolchain/bin/arm-linux-gnueabihf-gcc -o socket_client socket_client.c
chmod +x socket_client
cp socket_client /mnt/hgfs/share/


socket_client.c

/***************************************************************
 socket_client.c
 ***************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define SERVER_PORT		8888          
int main(void)
{
    struct sockaddr_in server_addr = {0};
    char buf[512];
    int sockfd;
    int ret;
    char ip[32]="";
    printf("please input ip addr !\n");
    if(scanf("%s",&ip) != 1){
    	printf("input ip error!\n ");
    }
    else{
			printf("ip addr is %s \n",&ip);
    } 
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (0 > sockfd) {
        perror("socket error");
        exit(EXIT_FAILURE);
    }
    memset(&server_addr,0,sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(SERVER_PORT);  
    server_addr.sin_addr.s_addr =inet_addr(&ip);
    ret = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    if (0 > ret) {
        perror("connect error");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    printf("server connect succeed...\n\n");
    for ( ; ; ) {
        memset(buf, 0x0, sizeof(buf));
        printf("Please enter a string: ");
        fgets(buf, sizeof(buf), stdin);
        ret = send(sockfd, buf, strlen(buf), 0);
        if(0 > ret){
            perror("send error");
            break;
        }
        if(0 == strncmp(buf, "exit", 4))
            break;
    }
    close(sockfd);
    exit(EXIT_SUCCESS);
}

五、在当前目录运行./ socket_client.sh编译出socket_client
六、编译好后用adb socket_serversocket_client传到rv1126板子上修改可执行属性

七、运行服务器程序./socket_server
用电脑的tcp工具的客户端连接。
运行结果如下:

 

八、运行电脑的服务器调试工具,打开服务器监听

运行客户端程序./socket_client
输入ip地址
运行结果如下:
好实验先到这里,谢谢大家。

最新回复

编译好后用adb 把socket_server、socket_client传到rv1126板子上修改可执行属性,这个步骤是个重点   详情 回复 发表于 2024-2-24 08:03
点赞 关注
 
 

回复
举报

6850

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

编译好后用adb 把socket_server、socket_client传到rv1126板子上修改可执行属性,这个步骤是个重点

点评

谢谢支持。客户端程序加了个输入服务器ip的提示和输入。方便调试。  详情 回复 发表于 2024-3-14 12:17
 
 
 

回复

6110

帖子

4

TA的资源

版主

板凳
 
Jacktang 发表于 2024-2-24 08:03 编译好后用adb 把socket_server、socket_client传到rv1126板子上修改可执行属性,这个步骤是个重点

谢谢支持。客户端程序加了个输入服务器ip的提示和输入。方便调试。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表