测试软件windows下串口助手和cmd下的telnet,ubuntu下的minicom.(设置好相应的串口号和端口号)此程序可以正常接收数据。
#include<termios.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<linux/kernel.h>
#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<sys/select.h>
#include<sys/time.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<errno.h>
#define PORT 6666
#define DeviceName "/dev/ttySAC2"
#define DeviceSpeedDef B115200
#define ParityBitDef
#define DataBitDef 8
#define StopBitDef 1
char buf[256];
int ComFd;
void SetCom(int fd,int BaudRate,int DateBit,int StopBit)
{
struct termios CmdCfg1,Cmdfg2;
tcgetattr(fd,&Cmdfg2);
CmdCfg1=Cmdfg2;
cfmakeraw(&CmdCfg1);
CmdCfg1.c_cflag&=~CSIZE;
cfsetispeed(&CmdCfg1,BaudRate);
cfsetospeed(&CmdCfg1,BaudRate); //
CmdCfg1.c_cflag&=~CSIZE;
CmdCfg1.c_cflag|=CS8;
CmdCfg1.c_cflag&=~PARENB;
CmdCfg1.c_iflag&=~INPCK;
CmdCfg1.c_cflag&=~CSTOPB;
CmdCfg1.c_cc[VTIME] = 1;
CmdCfg1.c_cc[VMIN] = 1;
tcflush(fd,TCIFLUSH);
tcsetattr(fd,TCSANOW,&CmdCfg1);
}
int ComRecv(int fd,char *buf,int datelen)
{
int len,fs_sel;
fd_set fs_read;
struct timeval time;
FD_ZERO(&fs_read);
FD_SET(fd,&fs_read);
time.tv_sec=5;
time.tv_usec=0;
fs_sel =select(fd+1,&fs_read,NULL,NULL,&time);
if(fs_sel)
{
len=read(fd,buf,datelen);
printf("len =%d,fs_sel=%d\n",len,fs_sel);
return len;
}
else
return 0;
}
int main(int argc,char *argv[])
{
int ser_sockfd,cli_sockfd,err,n,addlen;
struct sockaddr_in ser_addr;
struct sockaddr_in cli_addr;
char recvline[200],sendline[200];
ser_sockfd=socket(AF_INET,SOCK_STREAM,0);
if(ser_sockfd==-1)
{
printf("sockfd error:%s\n",strerror(errno));
return -1;
}
bzero(&ser_addr,sizeof(ser_addr));
ser_addr.sin_family=AF_INET;
ser_addr.sin_addr.s_addr=htonl(INADDR_ANY);
ser_addr.sin_port=htons(PORT);
err=bind(ser_sockfd,(struct sockaddr*)&ser_addr,sizeof(ser_addr));
if(err == -1)
{
printf("bind error:%s\n",strerror(errno));
return -1;
}
err=listen(ser_sockfd,5);
if(err==-1)
{
printf("listen error \n");
return -1;
}
printf("listen the port\n");
pthread_t IDComRecv;
int ret1;
int r_count;
ComFd = open(DeviceName,O_RDWR|O_NOCTTY);
if(ComFd ==-1)
{
printf("Open Com failed");
return 1;
}
SetCom(ComFd,DeviceSpeedDef,DataBitDef,StopBitDef);
while(1)
{ addlen = sizeof(struct sockaddr);
cli_sockfd=accept(ser_sockfd,(struct sockaddr*)&cli_addr,&addlen);
if(cli_sockfd==-1)
{
printf("accept error\n");
}
while(1)
{
r_count = ComRecv(ComFd, buf, sizeof(buf));
if(r_count)
{
for(int i = 0; i < r_count; i++)
{
printf("buf[%d] = 0x%x\n", i, buf[i]);
}
send(cli_sockfd,buf,strlen(buf),0);
}
}
close(cli_sockfd);
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)