Linux下C网络编程实现串口与网口的信息透传
1、网口采用TCP通信,端口号和串口波特率采用带参执行;
2、TCP服务端可以支持1个客户端的同时连接;
3、串口至少支持1个;
4、模拟串口终端设备与远程PC机之间双向能透明传输数据;
5、程序交互友好,有必要的“出错、正常”等信息提示;
客户端代码
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/resource.h>
#define MAXLINE 1024
char sendhead[MAXLINE];
int main(int argc , char *argv[])
{
int sockfd;
struct sockaddr_in servaddr;
char *info="cxt";
int maxfdp1, stdineof;
fd_set rset;
char recvbuf[MAXLINE],tmp[128],sendbuf[MAXLINE];
int n,len,fd;
if(argc!=3)
{
printf("请使用:地址+端口 ");
exit(0);
}
/* 客户程序填充服务端的资料 */
bzero(&servaddr,sizeof(servaddr)); //初始化,置0.
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(atoi(argv[2])); // (将本机器上的short 数据转化为网络上的short 数据)端口号
//server_addr.sin_addr = *((struct in_addr *)host->h_addr); // IP 地址
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
/* 客户程序开始建立 sockfd 描述符 */
if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
fprintf(stderr,"scoket 错误 %s\a\n",strerror(errno));
exit(1);
}
/* 原始代码 */
/* if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1 ){
perror("socket");
exit(1);
}
printf("%s 连接服务器/n",info);*/
/* 客户程序发起连接请求 */
if( ( connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) )<0){
perror("连接");
exit(1);
}
/* 连接成功了 */
//send(sockfd,info,strlen(info),0);
while(1)
{
/*sendbuf="张林泉";n=send(sockfd,sendbuf,strlen(sendbuf)-1,0);*/
printf("请输入发送内容:\n");
/*发送数据*/
fgets(sendbuf,1024,stdin);
write(sockfd,sendbuf,strlen(sendbuf));
n=send(sockfd,sendbuf,strlen(sendbuf)-1,0); //发送数据
if(n>0)
{
printf("发送的信息是: %s\n",sendbuf);}
else
{
printf("等待接收信息");
//printf("发送信息: %s 错误,错误原因是 %s:%s\n",sendbuf,errno,strerror(errno));
}
bzero(sendbuf,strlen(sendbuf)); //初始化,置0.
write(sockfd,recvbuf,strlen(recvbuf));
n=recv(sockfd, recvbuf, MAXLINE,0) ; //receive data
if(n<0) {
perror("str_cli: 服务提前终止\n");}
else if(n==0)
{
printf("服务关闭!\n");
exit(-1);}
//接收信息
recvbuf[n]='\0';
printf("接收到的信息为:%s\n",recvbuf);
fflush(stdout);
bzero(recvbuf,strlen(recvbuf));
}
exit(0);
}
服务器端代码
//编译的时候:gcc ZserverZ.c -o test -lpthread(打开管理员权限,如果提示找不到文件,去程序里面该ttyUSB)
//注意:带参运行(./ZserverZ 192.168.43.82 8080 /dev/ttyUSB0 115200)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#inc