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