:加载套接字库,创建套接字(WSAStartup()/socket());

:绑定套接字到一个IP地址和一个端口上(bind());

:将套接字设置为监听模式等待连接请求(listen());

:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());

:用返回的套接字和客户端进行通信(send()/recv());

:返回,等待另一连接请求;

:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
#ifdef WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
#include <net/if.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/select.h>
#endif bool InstanceServer::getAvailableListenPort(std::string &port)
{
bool result = true; #ifdef WIN32
WSADATA wsa;
/*初始化socket资源*/
if (WSAStartup(MAKEWORD(, ), &wsa) != )
{return false; //代表失败
}
#endif // 1. 创建一个socket
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 2. 创建一个sockaddr,并将它的端口号设为0
struct sockaddr_in addrto;
memset(&addrto, , sizeof(struct sockaddr_in));
addrto.sin_family = AF_INET;
addrto.sin_addr.s_addr = inet_addr(CLIENT_IP.c_str());
addrto.sin_port = ; // 3. 绑定
int ret = ::bind(sock, (struct sockaddr *)&(addrto), sizeof(struct sockaddr_in));
if ( != ret)
{return false;
} // 4. 利用getsockname获取
struct sockaddr_in connAddr;
memset(&connAddr, , sizeof(struct sockaddr_in));
#ifdef WIN32
int len = sizeof(connAddr);
#else
unsigned int len = sizeof(connAddr);
#endif
ret = ::getsockname(sock, (sockaddr*)&connAddr, &len); if ( != ret)
{return false;
} port = (std::string)ntohs(connAddr.sin_port); // 获取端口号 #ifdef WIN32
if ( != closesocket(sock))
#else
if ( != close(sock))
#endif
{
result = false;
}
return result;
}

C++ Socket 获取本机可用端口号(QT)的更多相关文章

  1. C#获取本机可用端口

    当我们要创建一个Tcp/UDP Server connection ,我们需要一个范围在1000到65535之间的端口 .但是本机一个端口只能一个程序监听,所以我们进行本地监听的时候需要检测端口是否被 ...

  2. 获取本地IP和端口号的指令

    ipconfig就可以获取ip 获取端口号的指令: 开始--运行--cmd--输入netstat an(中间有一空格)

  3. C#动态获取本机可用串口的两种方式

    1. private void GetSerialPort() //获取串口列表 { RegistryKey keyCom = Registry.LocalMachine.OpenSubKey(&qu ...

  4. Java Socket获取本机的InetAddress实例

    package com.immooc;/* * InetAddress类 */import java.net.InetAddress;import java.net.UnknownHostExcept ...

  5. python获取本机IP、mac地址、计算机名

    在python中获取ip地址和在php中有很大不同,在php中往往比较简单.那再python中怎么做呢? 我们先来看一下python 获得本机MAC地址: 1 2 3 4 import uuid de ...

  6. Socket网络编程(TCP/IP/端口/类)和实例

    Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...

  7. Qt获取本机IP地址

    Qt获取本机IP地址: Qt版本:4.8.6 #include <QtNetwork/QNetworkInterface.h> QString ipAddr; QList<QHost ...

  8. C# — 动态获取本地IP地址及可用端口

    1.在VS中动态获取本地IP地址,代码如下: 2.获取本机的可用端口以及已使用的端口:

  9. accept返回的socket的端口号和连接socket一样的!!! socket绑定信息结构

    今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口? 讨论完后,才发现,自己虽然 ...

随机推荐

  1. Docker在线文档收集

    极客学院 kubernetes中文社区 易百教程

  2. STL 最大堆与最小堆

    在第一场CCCC选拔赛上,有一关于系统调度的水题.利用优先队列很容易AC. // 由于比赛时花费了不少时间研究如何定义priority_queue的比较函数,决心把STL熟练掌握... Queue 首 ...

  3. 用JS把数组内的日期转换为星期

    核心代码 给定日期是星期几,应把字符串转为Date: new.Date('2017-12-30').getDay(); // 返回0,表示星期天,1:星期一…… 案例: 需求: 调用此方法 funct ...

  4. linux中断处理-顶半部(top half)和底半部(bottom half) -转

    原文:http://rensanshi.blog.163.com/blog/static/21395510820136282224877/ 设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率 ...

  5. ssh 免密码登入

    1.普通免密码登入 (1)  生成秘钥 [root@vick ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter f ...

  6. What is python .. (“dot dot”) notation syntax?

    What you have is a float literal without the trailing zero, which you then access the __truediv__met ...

  7. Django项目:CMDB(服务器硬件资产自动采集系统)--06--06CMDB测试Linux系统采集硬件数据的命令01

    #base.py # ————————01CMDB获取服务器基本信息———————— from config import settings #配置文件 class BasePlugin(object ...

  8. php filemtime filectime fileatime的区别

    1.fileatime()int fileatime(string filename):fileatime()函数返回filename最后访问的时间,这里的最后访问是指每当一个文件的数据块被读取,采用 ...

  9. 19-10-18-Night-U

    话说T3: 一句话题意……见过这个嘛…… 于是:$\sum \limits_{i!=j} \binom{a_i+b_i+a_j+b_j}{a_i+a_j}$ ------------前言结束----- ...

  10. N!中素因子p的个数 【数论】

    求N!中素因子p的个数,也就是N!中p的幂次 公式为:cnt=[n/p]+[n/p^2]+[n/p^3]+...+[n/p^k]; 例如:N=12,p=2 12/2=6,表示1~12中有6个数是2的倍 ...