UDP接收和发送线程 实际应用案例

这个示例展示了如何使用C语言实现UDP消息的接收和发送线程。通过`SetupRecvSocket`设置接收socket,`receiveMsgThread`接收消息,`sendMsgThread`发送消息。代码包括了对socket的创建、绑定、选择、接收和发送操作,以及线程的创建与管理。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h> /*for errno*/
#include <fcntl.h>
#include <sys/types.h> /*for open close*/
#include <sys/stat.h>
#include <sys/ioctl.h> /*for ioctl*/
#include <sys/mman.h> /*for mmap*/
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

#include <signal.h>
#include <sys/time.h>
#include <sys/mount.h>
#include <pthread.h>

#include <netdb.h>
typedef enum{
    UDP_MSG_START_LIVE_RECORDING = 0,
    UDP_MSG_STOP_LIVE_RECORDING,
    UDP_MSG_START_RESERVATION_RECORDING,
    UDP_MSG_START_STOP_RESERVATION_RECORDING,
    UDP_MSG_CHECK_LIVE_RECORDING,
    UDP_MSG_CHECK_RESERVATION_RECORDING
}UDP_MSG_TYPE ;

typedef struct UDP_MESSAGE_S{
    UDP_MSG_TYPE msgType;    
    char msgBody[300];
    //int msgLength;
} UDP_MESSAGE_S;

#define MSG_MAX 304
#define UDP_RECV_MSG_PORT 9009
#define UDP_SEND_MSG_PORT 9009

pthread_t recvThreadId;
static int recv_sockfd = -1;
char encAddr[64];
struct sockaddr_in server_addr;

int SetupRecvSocket(char *server, int port)
{
    struct hostent *host;
    struct sockaddr_in saddr;
    int sock;
    printf("server = %s\n", server);    

    if ( (sock = socket (AF_INET, SOCK_DGRAM, 0) ) == -1)                 //get a socket fd
    {
        fprintf (stderr, "Socket Error:%s\a\n", strerror (errno) );
        return -1;
    }

    bzero (&server_addr, sizeof (server_addr) );//fill in structure with client info

    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl (INADDR_ANY);
    server_addr.sin_port = htons(UDP_RECV_MSG_PORT);

    if (bind (sock,(struct sockaddr *) & server_addr,    sizeof (server_addr) ) < 0){ //bind a port not used
        fprintf (stderr, "[pvrFileList] Cannot bind socket\n");
        return -1;
    }

    return sock;
}
void receiveMsg()
{
    int length = 0;
    int zeroreads = 0;
    fd_set readfds, writefds, exceptfds;
    struct timeval timeout;
    struct sockaddr_in clientAddr;
    char Xmsg[MSG_MAX];
    socklen_t addr_size = sizeof(server_addr);
        
    FD_ZERO(&writefds);
    FD_ZERO(&exceptfds);

    printf("Wait for encoder to start before registering for stats\n");
    //sleep(1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值