2.Socket 编程 UDP

1.UDP网络编程

0.背景知识

自实现IP转化

相关函数理解

IP相关理解

1. V2版本 - DictServer封装版

实现一个简单的英译汉的网络字典

Dict.hpp

dictionary.txt

InetAddr.hpp

• 在 InetAddr 中,重载一下==方便对用户是否是同一个进行比较

Log.hpp

makefile

Mutex.hpp

UdpClient.cc

UdpServer.cc

UdpServer.hpp

2.V3版本 - 简单聊天室

Cond.hpp(条件变量)

InetAddr.hpp

Log.hpp

makefile

Mutex.hpp

Route.hpp

Thread.hpp

ThreadPool.hpp

UdpClient.cc

udp 是全双工的。既可以读,也可以写,可以同时读写,不会多线程读写的问题.

• 多线程客户端,同时读取和写入

UdpServer.cc

UdpServer.hpp

附录1:

附录2:

UdpServer.cc中3. 网络服务器对象,提供通信功能

附录(杂):

基于 IPv4 的 socket 网络编程,sockaddr_in 中的成员 struct in_addr
sin_addr 表示 32 位 的 IP 地址
但是我们通常用点分十进制的字符串表示 IP 地址,以下函数可以在字符串表示 和
in_addr 表示之间转换;

inet_ntoa 这个函数返回了一个 char*, 很显然是这个函数自己在内部为我们申请了一块
内存来保存 ip 的结果. 那么是否需要调用者手动释放呢?
man 手册上说, inet_ntoa 函数, 是把这个返回结果放到了静态存储区. 这个时候不需要
我们手动进行释放
明确提出 inet_ntoa 不是线程安全的函数;