【多线程】多线程C++实现UDP IPv4 Server Trunk(V1_1.0)

这是一个C++编写的多线程UDP IPv4服务器,支持指定服务器IP和端口,通过三个线程分别处理接收数据、显示队列数据和用户输入发送。服务器使用了ms级别超时的recvfrom避免接收阻塞,并实现了一个原子队列,以无锁方式处理数据竞争。此外,程序在异常或正常退出时能自动关闭套接字,避免端口占用,并通过了内存泄漏检测。
摘要由CSDN通过智能技术生成

udp ipv4 server trunk工程代码:

    链接:https://pan.baidu.com/s/1kWoI2jH 密码:yzzl

server功能和实现机制:

    1)./a.out 1.1.1.1 12345,支持指定server ip和server port


    2)多线程处理三种事件:接收数据到队列,显示队列数据,接收用户输入数据并发送给对端客户端

  Succeed to thread_create for routine, thread id(0xddd5a700).
  Succeed to thread_create for routine, thread id(0xdd559700).
  Succeed to thread_create for routine, thread id(0xdcd58700).

    3)udp socket设置了ms级别的接收recvfrom超时,防止接收线程接收阻塞而占用cpu,从而导致切换不到其他两个线程进行工作。

    4)接收数据和显示数据竞争共用一个队列List

                队列互斥机制:自己实现了一个原子队列类,没有使用多线程使用lock&unlock一个队列mutex或者pend&post同一个信号量的机制。多线程在外面随便操作原子队列,原子队列内部会实现队列的操作都是原子操作。

    5)程序异常或正常退出时(exit/ctrl+c等)会自动关闭socket。解决了程序退出而socket未关闭导致本地端口被占用的问题。

    6)程序通过了valgrind的子工具memcheck的内存泄漏检测,不存在内存泄漏问题。

root@ubuntu:~/server/trunk# valgrind --log-file=./valgrind.log --tool=memcheck --leak-check=full --show-reachable=no ./a.out svrIP svrPort
Succeed to thread_create for routine, thread id(0x68c2700).
[0.00.001], Push one message.
[0.00.002], Push one message.
Succeed to thread_create for routine, thread id(0x70c3700).
Succeed to thread_create for routine, thread id(0x78c4700).
[0.00.001], Read one message(7Bytes):{0123456
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值