赞
踩
客户端代码实现远程控制GEC6818开发板的灯
原理图:
完整代码如下:
//LED服务器端 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <string.h> #include <netinet/in.h> #include <unistd.h> #include <pthread.h> #include <semaphore.h> #include "cJSON.h" #include <stdbool.h> #define MAXSIZE 100 void *client_thread(void *arg); sem_t sm; struct ClientInfo{ int sockfd; char id[16]; }; //定义一个结构体数组 struct ClientInfo cinfo[MAXSIZE]; int main(void) { //初始化信号量:wq sem_init(&sm, 0, 0); //1.创建套接字 int sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0) { perror("socket fail"); return -1; } //2.绑定 struct sockaddr_in addr; //定一个存储地址,端口号的替代结构体 //struct sockaddr_in *p = (struct sockaddr_in*)&addr; memset(&addr, 0, sizeof(addr)); //初始化为0 addr.sin_family = AF_INET;//初始化地址族IPV4 addr.sin_port = htons(8989); //设置端口号(网络字节序号) addr.sin_addr.s_addr = INADDR_ANY;//初始化绑定地址, 用INADDR_ANY--表示绑定本机地址 int ret = bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)); if(ret < 0) { perror("bind fail:"); return -1; } //3.监听 ret = listen(sockfd, 5); if(ret < 0) { perror("listen error"); return -1; } //4.接受链接, 没有客户端链接的时候此函数阻塞 struct sockaddr_in clientaddr; //保存客户端地址 socklen_t len = sizeof(clientaddr);//保存地址长度 //初始化客户端信息结构体数组 memset(cinfo, 0, sizeof(cinfo)); //主线程负责接受客户端链接, 不收发数据 while(1) { int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len); if(clientfd < 0) { perror("accept error"); return -1; } //创建一个线程 pthread_t id = 0; pthread_create
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。