1. udp_socket_发送数据

本文详细介绍了一个使用C语言实现的UDP数据发送程序。通过创建UDP套接字,设置目标IP和端口,然后发送数据到指定地址。代码展示了如何使用socket、sendto等函数进行网络通信。

//udp_socket_发送数据

#include <stdio.h>  
#include<sys/socket.h>//socket  
#include<unistd.h>//close  
#include<netinet/in.h>//struct sockaddr_in  
#include<string.h>//strlen bzero  
#include<arpa/inet.h>//htons  inet_pton  
int main(int argc, char const *argv[])  
{  
    //创建一个用于UDP通信的套接字sockfd  
    //AF_INET IPv4  AF_INET6 IPv6  
    //SOCK_DGRAM udp编程     
    //0 自动识别协议类型  
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);  
    if(sockfd < 0)  
    {  
        perror("scoket");  
        return 0;  
    }  
  
    printf("sockfd = %d\n", sockfd);  
  
    //使用sendto  10.0.122.200   8080 发送udp数据  
    //定义一个ipv4套接字地址结构  
    struct sockaddr_in dstAddr;  
    //先将dstAddr清0  
    //memset(&dstAddr, 0, sizeof(dstAddr));  
    bzero(&dstAddr, sizeof(dstAddr));  
    //赋值协议  
    dstAddr.sin_family = AF_INET;//IPv4协议  
    //赋值 目的端口 8080  
    dstAddr.sin_port = htons(8080);  
    //赋值 目的IP 10.0.122.200  
    inet_pton(AF_INET, "10.0.122.200", &dstAddr.sin_addr.s_addr);  
  
  
    char msg[] = "hello udp data";  
    //如果 sockfd没有认为指定端口 ip 那么在第一次调用sendto的时候系统会自动添加随机端口 和自身IP  
    sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr *)&dstAddr, sizeof(dstAddr));  
  
    //关闭套接字  
    close(sockfd);  
    return 0;  
}  
import serial import socket import threading ser = None udp_socket = None udp_target = ("127.0.0.1", 1989) def serial_open(): global ser try: ser=serial.Serial(port="COM6", baudrate=9600, # 波特率 bytesize=8, # 据位 parity=serial.PARITY_NONE, # 奇偶校验位(serial.PARITY_NONE:关闭,serial.PARITY_ODD:奇校验,serial.PARITY_EVEN:偶校验) stopbits=serial.STOPBITS_ONE, # 停止位 timeout=None # 超时值(None:阻塞模式,0:非阻塞模式,正:超时时间) ) if ser.is_open: print("串口打开成功") else: print("串口打开失败") except Exception as e: print(e) def udp_open(): global udp_socket try: udp_socket=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建udp套接字(SOCK_STREAM:tcp,SOCK_DGRAM:udp) ip_port=("127.0.0.1",1999) # 指定ip地址与端口 udp_socket.bind(ip_port) # bind except Exception as e: print(e) def udp_to_serial(): while True: print("等待udp据") data_U_to_S ,addr= udp_socket.recvfrom(1024) if data_U_to_S: print(f"接收到来自{addr}的据") bytes_written=ser.write(data_U_to_S) print(f"实际写入串口的字节: {bytes_written}") print("udp送到串口:",data_U_to_S.decode("gbk","replace")) ser.flush() def serial_to_udp(): while True: print("等待来自串口的据") data_S_to_U = ser.read() if data_S_to_U: print(f"实际从串口读到的字节:{data_S_to_U}") print("接收到串口的据") udp_socket.sendto(data_S_to_U, udp_target) print("串口送到udp",data_S_to_U.decode("gbk","replace")) if __name__=="__main__": serial_open() udp_open() threading.Thread(target=serial_to_udp).start() threading.Thread(target=udp_to_serial).start()
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值