Linux下C网络编程实现串口与网口的信息透传

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
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遥映人间冰雪样

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值