📄 productclient.c
字号:
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <pthread.h>#include <semaphore.h>#include "gprs_modem.h"#define SERVERPORT 3200#define MAXDATASIZE 100char *DEV="/dev/ttyS0";int socketfd;sem_t sem_read,sem_write;void pthreadread(void *pthreadcom);void pthreadwrite(void);int main(int argc,char *argv[]) { struct hostent *host; struct sockaddr_in serv_addr; pthread_t p_read,p_write; int ret; int com; ret=sem_init(&sem_read,0,1); ret=sem_init(&sem_write,0,0); if(ret!=0) { perror("sem_init error"); } if(argc<2) { fprintf(stderr,"Please enter the server's hostname!\n"); exit(1); } if((host=gethostbyname(argv[1]))==NULL) { perror("gethostbyname error"); exit(1); } if((socketfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket error"); exit(1); } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(SERVERPORT); serv_addr.sin_addr=*((struct in_addr*)host->h_addr); bzero(&(serv_addr.sin_zero),8); if(connect(socketfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1) { perror("connect error"); exit(1); } if((com=Open_Init_COM(DEV))==-1) { perror("open dev error"); exit(1); } ret=Gprs_MessageReady(com); if(ret==0) { printf("receive message success\n");
} else { printf("AT COMMAND num=%d %s EXECUTE ERROR\n",ret); exit(1); } ret=pthread_create(&p_read,NULL,(void *)pthreadread,(void *)&com); if(ret!=0) { perror("pthread read error"); exit(1); } ret=pthread_create(&p_write,NULL,(void *)pthreadwrite,NULL); if(ret!=0) { perror("pthread write error"); exit(1); } pthread_join(p_read,NULL); pthread_join(p_write,NULL); close(socketfd); return 0;} void pthreadread(void *pthreadcom) { int threadcom=*(int *)pthreadcom; int sendbytes; int reval; char buf[MAXDATASIZE]; struct shortmsg * pRevMsg=(struct shortmsg *)malloc(sizeof(struct shortmsg)); while(1) { sem_wait(&sem_read); printf("Please input Product ID or exit exit programm\n"); reval=Gprs_ReceiveMessage(threadcom,pRevMsg); strcpy(buf,pRevMsg->msgcontent); if(strncmp(buf,"exit",4)==0) { printf("exit programm\n"); exit(1); } if((sendbytes=send(socketfd,buf,sizeof(buf),0))==-1) { perror("send error"); exit(1); } sem_post(&sem_write); }}void pthreadwrite(void) { int recvbytes; char buf[MAXDATASIZE]; while(1) { sem_wait(&sem_write); printf("recv buf\n"); if((recvbytes=recv(socketfd,buf,sizeof(buf),0))==-1) { perror("recv error"); exit(1); } buf[recvbytes]='\0'; printf("recv is\n %s \n",buf); sem_post(&sem_read); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -