精华内容
下载资源
问答
  • socket获取本机IP地址方法

    万次阅读 2014-02-07 00:43:33
    获取计算机名称和IP地址可以通过调用winsock里面函数完成,下面上是用到函数:1.WSAStartup(),此函数在应用程序中初始化windows sockets DLL,这个函数调用成功后,才可以调用其他api函数。...

        获取计算机的名称和IP地址可以通过调用winsock里面的函数完成,下面上是用到的函数:1.WSAStartup(),此函数在应用程序中初始化windows sockets DLL,这个函数调用成功后,才可以调用其他的api函数。

    2.WSACleanup()函数,应用程序会占用系统资源,这个函数用来解除与socket的绑定,并且释放占用的系统资源。

    3.gethostname() 用于获取本地主机的主机名

    4.gethostbyname()gethostname()获取的主机名可以传入gethostbyname,获取“主机列表”。一台主机可以有多个IP地址,为了输出所有IP地址,要用一个循环来实现。

    #include <iostream>
    using namespace std;
    #include "winsock2.h"
    #pragma comment(lib,"ws2_32.lib")
    int main()
    {
    WSAData data;
    if(WSAStartup(MAKEWORD(1,1),&data)!=0)
    {
       cout<<"初始化错误endl ;
    }
      
    char host[255];
    if(gethostname(host,sizeof(host))==SOCKET_ERROR)
    {
       cout<<"无法获取主机名"<<endl;
    }
    else
    {
       cout<<"本机计算机名为:"<<host<<endl;
    }
    
    struct hostent *p=gethostbyname(host);
    if(p==0)
    {
       cout<<"无法获取计算机主机名及IP"<<endl;
    }
    else
    {
         
       //本机IP:利用循环,输出本机所有IP
       for(int i=0;p->h_addr_list[i]!=0;i++)
       {
        struct in_addr in;
        memcpy(&in,p->h_addr_list[i],sizeof(struct in_addr));
        cout<<"第"<<i+1<<"块网卡的IP为:"<<inet_ntoa(in)<<endl;
       }
    
    }
    
    WSACleanup();
    
    cin.get();
    return 0;
    }
    
    
    
    

    上面的代码中,gethostbyname的返回值送入了hostent结构体中,hostent结构体在winsock2.h中声明

     hostent的定义如下:

    struct hostent{

    char *h_name;

    char **h_aliases;

    int h_addrtype;

    int h_length;

    char **h_addr_list;

    # define h_addr h_addr_list[0];

    };

    h_name   为地址名称

    h_aliases 地址的预备名称指针

    h_addtype  地址类型

    h_length   地址的长度

    h_addr_list  主机网络地址指针

    h_addr   h_add_list 的第一个地址


    展开全文
  • 获取计算机名称和IP地址可以通过调用winsock里面函数完成,下面上是用到函数:1.WSAStartup(),此函数在应用程序中初始化windows sockets DLL,这个函数调用成功后,才可以调用其他api函数。 2.WSACleanup()...

    获取计算机的名称和IP地址可以通过调用winsock里面的函数完成,下面上是用到的函数:1.WSAStartup(),此函数在应用程序中初始化windows sockets DLL,这个函数调用成功后,才可以调用其他的api函数。

    2.WSACleanup()函数,应用程序会占用系统资源,这个函数用来解除与socket的绑定,并且释放占用的系统资源。

    3.gethostname() 用于获取本地主机的主机名

    4.gethostbyname()gethostname()获取的主机名可以传入gethostbyname,获取“主机列表”。一台主机可以有多个IP地址,为了输出所有IP地址,要用一个循环来实现。

    #include "stdafx.h"
    #include <iostream>  
    using namespace std;  
    #include "winsock2.h"  
    #pragma comment(lib,"ws2_32.lib")  
    int main()  
    {  
    WSAData data;  
    if(WSAStartup(MAKEWORD(1,1),&data)!=0)  
    {  
       cout<<"初始化错误endl" ;  
    }  
        
    char host[255];  
    if(gethostname(host,sizeof(host))==SOCKET_ERROR)  
    {  
       cout<<"无法获取主机名"<<endl;  
    }  
    else  
    {  
       cout<<"本机计算机名为:"<<host<<endl;  
    }  
      
    struct hostent *p=gethostbyname(host);  
    if(p==0)  
    {  
       cout<<"无法获取计算机主机名及IP"<<endl;  
    }  
    else  
    {  
        cout<<p->
       //本机IP:利用循环,输出本机所有IP  
       for(int i=0;p->h_addr_list[i]!=0;i++)  
       {  
        struct in_addr in;  
        memcpy(&in,p->h_addr_list[i],sizeof(struct in_addr));  
        cout<<"第"<<i+1<<"块网卡的IP为:"<<inet_ntoa(in)<<endl;  
       }  
      
    }  
      
    WSACleanup();  
      
    cin.get();  
    return 0;  
    }  

    上面的代码中,gethostbyname的返回值送入了hostent结构体中,hostent结构体在winsock2.h中声明

     hostent的定义如下:

    struct hostent{

    char *h_name;

    char **h_aliases;

    int h_addrtype;

    int h_length;

    char **h_addr_list;

    # define h_addr h_addr_list[0];

    };

    h_name   为地址名称

    h_aliases 地址的预备名称指针

    h_addtype  地址类型

    h_length   地址的长度

    h_addr_list  主机网络地址指针

    h_addr   h_add_list 的第一个地址

    gethostname:  是获取本机的所有的IP地址。

    还有一个:getsockname:  是获取跟某一特定的socket相关的IP地址。

    getsockname方式来获取对应的 IP地址的时候,首先需要通过socket函数创建的有效的套接字,另外还要bind。才能执行成功。如果在socket和bind之间调用就会调用失 败。虽然在bind之后可以执行成功,通常我们得到的结果是0.0.0.0,除非在bind的时候就指定特定的IP。

    如果想获取本机所有网卡的信息,当然也包括IP的信息。可以通过GetAdaptersInfo这个windows API。区别于上述方法的是,这个函数只能在windows上面,前面两个在windows和linux上面都可以。

    GetAdaptersInfo:

      在win下时,如果不只想单单获取ip地址,还要分清这个ip地址对应哪个网卡时,就需要这个了。

       windows sdk中,用IP_ADAPTER_INFO结构体存储网卡信息,包括网卡名、网卡描述、网卡MAC地址、网卡IP等,结构体结构如下:

    typedef struct _IP_ADAPTER_INFO {
      struct _IP_ADAPTER_INFO* Next;//指向链表中下一个适配器信息的指针
      DWORD ComboIndex;//预留值
      char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];//使用ANSI字符串表示的适配器名称
      char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];//使用ANSI字符串表示的适配器描述
      UINT AddressLength;//适配器硬件地址以字节计算的长度
      BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];//硬件地址以BYTE数组所表示
      DWORD Index;//适配器索引
        UINT Type;//适配器类型,主要有以下几种:
        /*
         *   MIB_IF_TYPE_OTHER     1
         *   MIB_IF_TYPE_ETHERNET     6
         *   MIB_IF_TYPE_TOKENRING     9
         *   MIB_IF_TYPE_FDDI     15
         *   MIB_IF_TYPE_PPP     23
         *   MIB_IF_TYPE_LOOPBACK      24
         *   MIB_IF_TYPE_SLIP      28
         */
      UINT DhcpEnabled;//指定这个适配器是否开启DHCP
      PIP_ADDR_STRING CurrentIpAddress;//预留值
      IP_ADDR_STRING IpAddressList;//该适配器的IPv4地址链表
      IP_ADDR_STRING GatewayList;//该适配器的网关IPv4地址链表
      IP_ADDR_STRING DhcpServer;//该适配器的DHCP服务器的IPv4 地址链表
      BOOL HaveWins;
      IP_ADDR_STRING PrimaryWinsServer;
      IP_ADDR_STRING SecondaryWinsServer;
      time_t LeaseObtained;
      time_t LeaseExpires;
      } IP_ADAPTER_INFO,*PIP_ADAPTER_INFO;

       由于可能有多个网卡,因此struct _IP_ADAPTER_INFO* Next字段为一个链表结构指针,由于一个网卡可能有多个IP,因此IP_ADDR_STRING字段应该也是一个链表结构,结构如下:

    typedef struct _IP_ADDR_STRING
    {
        struct _IP_ADDR_STRING* Next;  //指向同类型节点,即下一个IP(如果有多IP的话)
        IP_ADDRESS_STRING IpAddress;  //IP地址信息
        IP_MASK_STRING IpMask; //IP子网掩码
        DWORD Context;// 网络表入口。这个值对应着AddIPAddredd和DeleteIPAddress函数中的NTEContext参数
    } IP_ADDR_STRING;

     代码如下:参考http://www.oschina.net/code/snippet_222150_19528#32487

    // AllTest.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <WinSock2.h>
    #include <Iphlpapi.h>
    #include <iostream>
    #include <vector>
    using namespace std;
    #pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库
     
    int main(int argc, char* argv[])
    {
    	vector<char*> ip;
        //PIP_ADAPTER_INFO结构体指针存储本机网卡信息
        PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
        //得到结构体大小,用于GetAdaptersInfo参数
        unsigned long stSize = sizeof(IP_ADAPTER_INFO);
        //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
        int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
        //记录网卡数量
        int netCardNum = 0;
        //记录每张网卡上的IP地址数量
        int IPnumPerNetCard = 0;
        if (ERROR_BUFFER_OVERFLOW == nRel)
        {
            //如果函数返回的是ERROR_BUFFER_OVERFLOW
            //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
            //这也是说明为什么stSize既是一个输入量也是一个输出量
            //释放原来的内存空间
            delete pIpAdapterInfo;
            //重新申请内存空间用来存储所有网卡信息
            pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
            //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
            nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    
        }
    	if (ERROR_SUCCESS == nRel)
    	{
    		//控制无线网卡的多读入
    		int i=1;
    		//输出网卡信息
    		//可能有多网卡,因此通过循环去判断
    		while (pIpAdapterInfo)
    		{
    			cout<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
    			switch (pIpAdapterInfo->Type)
    			{
    			case MIB_IF_TYPE_OTHER:
    				break;
    			case MIB_IF_TYPE_ETHERNET:
    				{
    					//可能网卡有多IP,因此通过循环去判断
    					IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
    					do
    					{
    						//IP 地址:
    						while (ip.size()<2) ip.push_back("");
    							if (strcmp(pIpAddrString->IpAddress.String,"0.0.0.0")!=0&&strstr(pIpAdapterInfo->Description,"PCI"))
    								ip[1]=pIpAddrString->IpAddress.String;
    						//"子网地址:"pIpAddrString->IpMask.String
    						//"网关地址:"pIpAdapterInfo->GatewayList.IpAddress.String
    						pIpAddrString=pIpAddrString->Next;
    					} while (pIpAddrString);
    				}
    				break;
    			case MIB_IF_TYPE_TOKENRING:
    				break;
    			case MIB_IF_TYPE_FDDI:
    				break;
    			case MIB_IF_TYPE_PPP:
    				break;
    			case MIB_IF_TYPE_LOOPBACK:
    				break;
    			case MIB_IF_TYPE_SLIP:
    				break;
    			default://无线网卡在这里,Unknown type
    				{
    					IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
    					do
    					{
    						//IP 地址:
    						if (i++==1&&strcmp(pIpAddrString->IpAddress.String,"0.0.0.0")!=0&&strstr(pIpAdapterInfo->Description,"Wireless"))
    						{
    							while (ip.size()<1) ip.push_back("");
    							ip[0]=pIpAddrString->IpAddress.String;
    						}
    						else if (i!=2&&strcmp(pIpAddrString->IpAddress.String,"0.0.0.0")!=0&&strstr(pIpAdapterInfo->Description,"Wireless"))
    							ip.push_back(pIpAddrString->IpAddress.String);
    						//"子网地址:"pIpAddrString->IpMask.String
    						//"网关地址:"pIpAdapterInfo->GatewayList.IpAddress.String
    						pIpAddrString=pIpAddrString->Next;
    					} while (pIpAddrString);
    				}
    				break;
    			}
    	/*		cout<<"网卡MAC地址:"; pIpAdapterInfo->Address[i]);mac地址。*/
    				pIpAdapterInfo = pIpAdapterInfo->Next;
    		}
    
    	}
    	for (int i=0;i<ip.size();i++)
    		cout<<ip[i]<<endl;
    	//释放内存空间
    	if (pIpAdapterInfo)
    	{
    		delete pIpAdapterInfo;
    	}
    	system("pause");
    	return 0;
    }


    与某个套接字关联的外地协议地址即得到对方的地址(getpeername),getpeername只有在连接建立以后才调用,否则不能正确获得对方地址和端口。

    返回与某个套接字关联的本地协议地址(getsockname)

    需要这两个函数的理由如下:

    •   在一个没有调用bind的TCP客户上,connect成功返回后,getsockname用于返回由内核赋予该连接的本地IP地址和本地端口号(自动分配的),没有连接的UDP不能调用getpeername,但是可以调用getsockname和TCP一样,它的地址和端口不是在调用socket就指定了,而是在第一次调用sendto函数以后。

    •   在以端口号为0调用bind(告知内核去选择本地临时端口号)后,getsockname用于返回由内核赋予的本地端口号。

    •   在一个以通配IP地址调用bind的TCP服务器上,与某个客户的连接一旦建立(accept成功返回),getsockname就可以用于返回由内核赋予该连接的本地IP地址。在这样的调用中,套接字描述符参数必须是已连接套接字的描述符,而不是监听套接字的描述符。

    •   当一个服务器的是由调用过accept的某个进程通过调用exec执行程序时,它能够获取客户身份的唯一途径便是调用getpeername。





    展开全文
  • Socket获取客户端IP地址及端口号 程序设计>>>.Net>>> Socket获取客户端IP地址及端口号 >>> 正文 Socket获取客户端IP地址及端口号 Socket类包含一些非常...

    程序设计 >>> .Net >>> Socket获取客户端IP地址及端口号 >>> 正文
    Socket获取客户端IP地址及端口号 Socket类包含一些非常有用的属性,这些属性允许确定关于正在连接的客户端的信息。其中关键信息之一是返回EndPoint对象的RemoteEndPoint属性。EndPoint类本身是抽象的,要想收集有用的信息,需·要把EndPoint强制类型转换为IPEndPoint对象。IPEndPoint类包含远程客户端的IP地址和端口号。具体用法如下:       TcpListener tcpl=new TcpListener(port); 
        Socket s=tcpl.AcceptSocket(); 
        label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString(); 
        label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString(); 
    posted on 2011-01-28 14:07 donqiang 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/donqiang/archive/2011/01/28/1946986.html

    展开全文
  • 前一篇文章的UDP Socket示例程序的Client是循环发送固定的一句话,有时候我们希望像聊天软件一样可以自己输入数据。读取屏幕字符串可以使用gets函数和fgets函数,然而因为安全方面的因素,推荐使用后者。 char *...

      前一篇文章的UDP Socket示例程序的Client是循环发送固定的一句话,有时候我们希望像聊天软件一样可以自己输入数据。读取屏幕字符串可以使用gets函数和fgets函数,然而因为安全方面的因素,推荐使用后者。

    char *fgets(char *buf, int bufsize, FILE *stream);
    • buf: 字符型指针,指向用来存储所得数据的地址
    • bufsize: 整型数据,指明存储数据的大小
    • stream: 文件结构体指针,将要读取的文件流
    • 返回值:成功,返回第一个参数的buffer;错误,返回NULL

      从stream中读取数据,每次读取一行,若一行的长度大于第二个参数指定的长度,则读取bufsize-1个数据,下一次调用会继续读取该行。从屏幕读取数据的话,只需把第三个参数设为stdin
      下面的程序为UDP Client,用法和上一篇文章中的Client一样搭配Server使用,只是每次输入一句话后按Enter键发送数据。默认BUFF_SIZE为200,可以尝试一次输入大于200个字符看看是不是分两句发送的。

    UDP Client

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <string.h>
    
    #define DEFAULT_IP        "127.0.0.1"
    #define DEFAULT_PORT    6666
    #define BUFF_SIZE        200
    
    int main(int argc, char *argv[])
    { 
        char *SERVER_IP = DEFAULT_IP;
        int SERVER_PORT = DEFAULT_PORT;
    
        if(argc > 3)
            printf("param err:\nUsage: %s ip port | %s port | %s\n",argv[0],argv[0], argv[0]);
        else if(argc == 3)
        {
            SERVER_IP = argv[1];
            SERVER_PORT = atoi(argv[2]);
        }
        else if(argc == 2)
            SERVER_PORT = atoi(argv[1]);
    
        struct sockaddr_in servAddr;
        int cliSocket;
        char sendbuf[BUFF_SIZE];
    
    
        if((cliSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
        {
            printf( "socket err");
            exit(1);
        }
    
        servAddr.sin_family = AF_INET;
        servAddr.sin_port = htons(SERVER_PORT);
    //  servAddr.sin_addr.s_addr = inet_addr(SERVER_IP);    //Outdated method
        inet_aton(SERVER_IP, &servAddr.sin_addr);
    
    
        printf("Send data to %s:%d ...\n\n", SERVER_IP, SERVER_PORT);
    
        while(fgets(sendbuf, BUFF_SIZE, stdin))
        {
            printf("Send: %s\n", sendbuf);
            int num = sendto(cliSocket, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&servAddr, sizeof(servAddr));
            if(num == strlen(sendbuf))
                printf("Send scuccess, length:%d\n\n",num);
            else
                printf("send err\n");
    
            memset(sendbuf, 0, BUFF_SIZE);
        }
    
        close(cliSocket);
        return 0;
    }

    Source Code: https://github.com/lmshao/codebase /UdpClient_InputSend.c

    展开全文
  • 我是python和socket编程新手,尝试扫描广域网地址的端口。在通过使用nmap,我知道他打开了端口80和443。在为什么我不能从它上面看一下它是不是开着???另外,当我用程序扫描网关时,它显示21和23是打开,这...
  • VC获取IP地址和MAC地址程序(转载)

    千次阅读 2014-08-10 23:41:46
    VC获取IP地址和MAC地址程序(转载) 分类: VC 网络编程 C/C++2010-07-27 11:25 6381人阅读 评论(1) 收藏 举报 buffercommandstructinclude编程list   [cpp] view plaincopy ...
  • 本文实例讲述了python在Windows8下获取本机ip地址的方法。分享给大家供大家参考。具体实现方法如下: import socket hostname = socket.gethostname() IPinfo = socket.gethostbyname_ex(hostname) LocalIP = ...
  •   获取IP地址和MAC地址程序(转) 2008-03-01 20:08 #include &lt;winsock2.h&gt; //该头文件定义了Socket编程功能#include &lt;stdio.h&gt; //该头...
  • Python使用Socket写一个聊天程序

    千次阅读 2018-03-25 22:52:10
    方法:客户端1:获取发送信息的地址和端口,然后发送给对方服务端2,服务端2监听所有地址固定端口消息,然后将消息打印出来 然后回复一条给客户端1说收到了。客户端1可以继续向服务端2发送消息。 客户端...
  • 所谓 socket 通常也称作"套接字",用于描述 ip 地址和端口,是一个通信链句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。在 internet 上主机一般运行了多个服务软件,同时提供几种服务。每种...
  • 在Linux下编写获取本机网卡地址的程序,比较简单方法是利用套接口(socket)和IO接口(ioctl)函数来获取网卡信息,需要引用如下文件:#include<sys/socket.h>#include<sys/ioctl.h>#include<...
  • 2. 服务器先运行,自动获取IP,创建socket并绑定在2017端口; 3. 客户端通过IP地址连接服务器端,由argv[1]提供IP地址,回车后提示输入昵称,然后登录服务器; 4. 服务器负责接收用户信息,处理后转发给其他...
  • 在Linux下编写获取本机网卡地址的程序,比较简单方法是利用套接口(socket)和IO接口(ioctl)函数来获取网卡信息,需要引用如下文件: #include  #include  #include  #include  #include  socket...
  • 获取本机ip及mac地址 扣扣 1092230704 #include "pch.h" #include <iostream> #include <winsock2.h>//该头文件定义了Socket编程功能 #include <stdio.h>//该头文件声明了输入...
  • 大家可以看到,两个模拟器IP地址都是完全一样,所以要实现两个模拟器之间通信,使用模拟器IP地址是办不到获取模拟器名称: >adb devices List of devices attached emulator-5554 device ...
  • #include //该头文件定义了Socket编程功能 #include //该头文件声明了输入输出流函数 #include //该头文件定义了一些通用函数 #include //该头文件支持HTTP请求 #include //该头文件定义了Windows所有数据基本型...
  • 一个方法就是接收方创建一个socket监听一个端口,发送方通过广播方式给所有局域网内主机发送一个“hello”包,当然这个包是发往接收方监听端口,接收方接收到“hello”包后获取自己ip地址然后封装在数据报...
  • 在使用 Java 开发网络程序时,有时候我们需要知道本机在局域网中 IP 地址。Java 在 JDK1.4 时候添加一个类:NetworkInterface。上代码:import java.net.Inet4Address;import java.net.InetAddress;import ...
  • 内容比较杂,但都是在做网络应用程序开发过程中经常要遇到问题。 一、大端、小端和网络字节序 小端字节序:little-endian,将低字节存放在内存起始地址; 大端字节序:big-endian,将高字节存放在内存...
  • 与每一台计算机TCP 135号端口建立连接。如果建立连接成功,那么就表明该设备已经开启Windows系统...获取本机IP方法: InetAddress.getLocalHost().getHostAddress(); 得到本机IP后,获取IP网络号部分长度 L...
  • 程序执行流程: 1.创建套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0) 2.把结构体servaddr清零 bzero(&servaddr, sizeof(servaddr)) 3.置地址簇为AF_INET servaddr.sin_family = AF_INET 4.端口号设...
  • 在本机上启动两个模拟器,本机(PC)和... 大家可以看到,两个模拟器IP地址都是完全一样,所以要实现两个模拟器之间通信,使用模拟器IP地址是办不到。  获取模拟器名称:  >adb devices  
  • 程序执行流程: 1.创建TCP套接字 listenfd = Socket(AF_INET, SOCK_STREAM, 0) 2.清空sockaddr_in servaddr结构体 bzero(&servaddr, sizeof(servaddr)) 3.填写网际套接字地址结构 我们指定IP地址为INADDR_...
  • 其实在服务端Remoting可以像读取一个变量一样来获取到连接过来客户端IP,不过这个IP不是太容易取到。...Remoting、WebService底层都是用Socket来实现,Socket本身很容易可以获取到IP地址,所以理论上...
  • 大家可以看到,两个模拟器IP地址都是完全一样,所以要实现两个模拟器之间通信,使用模拟器IP地址是办不到获取模拟器名称: >adb devices List of devices attached emulator-5554...
  • 程序是我写博客“一起talk C栗子吧( 第一百五十五回:C语言实例--获取socket通信地址)”配套程序,共享给大家使用
  • 文章目录UNIX_NET获取服务器时间connect函数获取时间客户端程序实现获取时间服务器实现小技巧宏定义使用&&变参函数宏定义实现源码地址 UNIX_NET 获取服务器时间 connect函数 #include <sys/types.h&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 402
精华内容 160
关键字:

获取程序的socket地址