在很多情况下,我们需要使用固定的IP和端口号进行通信,而默认情况下client端的端口号是不固定的,是由系统自动分配空闲的端口号进行通信的;
但是在很多情况下,某些服务写的比较严格,只接收固定的IP和端口号的数据,大家都知道IP地址我们是可以保证不变的,但是端口号在默认情况下是不可能实现不变的,这个时候我们就需要对端口号进行特殊处理;
想到要端口号固定,默认我们就想到了使用bind函数绑定端口号进行数据通信,想法是对的,但是我们实际写出代码进行测试的时候发现错了;
bind不能和服务端绑定同一个IP和端口号,但是可以绑定不通的端口号然后进行发送,这个时候就真的实现了client端固定IP和端口号发送数据,那么问题来了,我们怎么去实现和监听服务使用同一个IP和端口号呢?如何让bind在监听端和发送端同时生效呢?
百度了下有关socket通信中端口号的一些知识,发现了一个特殊的字眼“复用”,没错socket中是可以对IP地址和端口号进行复用的,也就是监听和发送使用同一个IP和端口号;
找到了资料开始百度如何去复用端口号操作,查到了一个关键函数:setsockopt
具体有何意义,可以自行百度下此函数的使用,另外需要注意下,IP和端口号复用的参数是:SO_REUSEADDR
注意:监听和发送的时候必须同时使用setsockopt 这个函数方有效;
UDP服务监听示例代码:
static void* Create_UdpServer_Tread(void *point)
{
int sockfd;
int len;
int recvLen;
unsigned char buf[BUF_SIZE];
char log[BUF_SIZE];
char temp[8];