与socket有关的一些函数介绍
1、读取当前错误值:每次发生错误时,如果要对具体问题进行处理,那么就应该调用这个函数取得错误代码。

int  WSAGetLastError(void );#define h_errno   WSAGetLastError()

错误值请自己阅读Winsock2.h。
2、将主机的unsigned long值转换为网络字节顺序(32位):为什么要这样做呢?因为不同的计算机使用不同的字节顺序存储数据。因此任何从Winsock函数对IP地址和端口号的引用和传给Winsock函数的IP地址和端口号均时按照网络顺序组织的。

u_long  htonl(u_long hostlong);举例:htonl(0)=0htonl(80)= 1342177280

3、将unsigned long数从网络字节顺序转换位主机字节顺序,是上面函数的逆函数。

u_long  ntohl(u_long netlong);举例:ntohl(0)=0ntohl(1342177280)= 80

4、将主机的unsigned short值转换为网络字节顺序(16位):原因同2:

u_short  htons(u_short hostshort);举例:htonl(0)=0htonl(80)= 20480

5、将unsigned short数从网络字节顺序转换位主机字节顺序,是上面函数的逆函数。

u_short  ntohs(u_short netshort);举例:ntohs(0)=0ntohsl(20480)= 80

6、将用点分割的IP地址转换位一个in_addr结构的地址,这个结构的定义见笔记(一),实际上就是一个unsigned long值。计算机内部处理IP地址可是不认识如192.1.8.84之类的数据。

unsigned long  inet_addr( const char FAR * cp );举例:inet_addr("192.1.8.84")=1409810880inet_addr("127.0.0.1")= 16777343

如果发生错误,函数返回INADDR_NONE值。
7、将网络地址转换位用点分割的IP地址,是上面函数的逆函数。

char FAR *  inet_ntoa( struct in_addr in );举例:char * ipaddr=NULL;char addr[20];in_addr inaddr;inaddr. s_addr=16777343;ipaddr= inet_ntoa(inaddr);strcpy(addr,ipaddr);

这样addr的值就变为127.0.0.1。 注意意不要修改返回值或者进行释放动作。如果函数失败就会返回NULL值。
8、获取套接字的本地地址结构:

int  getsockname(SOCKET s, struct sockaddr FAR * name, int FAR * namelen );s为套接字name为函数调用后获得的地址值namelen为缓冲区的大小。

9、获取与套接字相连的端地址结构:

int  getpeername(SOCKET s, struct sockaddr FAR * name, int FAR * namelen );s为套接字name为函数调用后获得的端地址值namelen为缓冲区的大小。

10、获取计算机名:

int  gethostname( char FAR * name, int namelen );name是存放计算机名的缓冲区namelen是缓冲区的大小用法:char szName[255];memset(szName,0,255);if(gethostname(szName,255)==SOCKET_ERROR){//错误处理}返回值为:szNmae="xiaojin"

11、根据计算机名获取主机地址:

struct hostent FAR *  gethostbyname( const char FAR * name );name为计算机名。用法:hostent * host;char* ip;host= gethostbyname("xiaojin");if(host->h_addr_list[0]){struct in_addr addr;memmove(&addr, host->h_addr_list[0],4);//获得标准IP地址ip=inet_ ntoa (addr);}返回值为:hostent->h_name="xiaojin"hostent->h_addrtype=2    //AF_INEThostent->length=4ip="127.0.0.1"

 

转载于:https://www.cnblogs.com/azraelly/archive/2012/05/14/2498918.html

socket有关的一些扩展函数介绍相关推荐

  1. Socket.IO for Unity 简要介绍

    在项目中使用到了Socket.IO for unity这个Asset Store上免费的库,这里将简要的介绍一下它的结构,已经使用中的注意事项. 目录结构 上面为包的目录结构,简单的介绍一下具体的内容 ...

  2. linux socket 中的backlog参数介绍

    问题 我们在linux上服务器起了一个serversocket,并且设置了backlog为2,并没有让serversock.accept() 在客户端上,我们一个一个的启动了连接socket, 当连接 ...

  3. 同步和异步Socket多线程编程基本模型介绍

    多线程:  0.  多线程的概念:  多线程是这样一种机制,它允许在程序中并发执行多个线程,且每个线程彼此间互相独立.  并发的理解:  多个线程的执行是并发的,也就是在逻辑上"同时&quo ...

  4. 基于socket.io的php扩展介绍---phpsocket.io

    工具地址:https://github.com/walkor/phpsocket.io phpsocket.io是由workerman根据socket.IO扩展的用于php服务端通讯组件,后台服务用w ...

  5. Socket网络编程心跳包介绍

    跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着.事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一 ...

  6. linux socket recv函数 MSG_PEEK标志介绍

    考虑下面的场景,server向client发送数据"_META_DATA_\r\n_USER_DATA_",要求"\r\n"之前的数据_META_DATA_在第 ...

  7. socket通信简单介绍

    "一切皆Socket!" 话虽些许夸张,可是事实也是,如今的网络编程差点儿都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间怎样通 ...

  8. socket编程基础2(socket API函数介绍)

    "一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信 ...

  9. 用C#的Raw Socket实现网络封包监视

    <script language="javascript" src="/ad/js/edu_left_300-300.js" type="tex ...

最新文章

  1. (DML触发器)如何正确理解触发器的deleted表和inserted表(转)
  2. 大数据分析决策平台问题总结
  3. 批量将PNG转为JPG
  4. 怎么写字_写字楼外卖员不让进怎么办?写字楼外卖柜提供解决方案!
  5. vue内容横向循环滚动_vue文字横向滚动公告
  6. 惊了!日本街头出现透明公厕,竟有人排队抢着上!
  7. Oracle从小白到大牛的刷题之路(建议收藏学习)
  8. python写字板_pywinauto简单操作写字板的例子
  9. 关于 RGB 的颜色认知
  10. 通用知识图谱的构建及在QQ浏览器的应用实践
  11. mysql免安装版配置百度_mysql -5.7.10 免安装版配置
  12. 【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法
  13. 数据库pgAdminIII导入sql文件
  14. 【转载+整理】EJB(三) EJB分层架构
  15. Deeping Learning学习与感悟——《深度学习工程师》_4
  16. 用户运营day3——用户生命周期与用户成长路径的策略运营
  17. php正则国外手机号码,php--最新正则(手机号码)
  18. 一文带你了解机器翻译
  19. linux笔记:使用conda命令管理包、管理环境详细讲解
  20. su - root 和 su root 的区别

热门文章

  1. PADS Router VX.2.3 设置光标的类型
  2. FieldGroup绑定的日期类型存储格式的问题
  3. C# 数组 二维数组
  4. mac 10.12显示隐藏文件
  5. flash特效原理:螺旋效果 (3)
  6. sigprocmask理解
  7. 很有趣的问题,Public继承和默认的集成
  8. Android setFocusableInTouchMode 方法使用和源码详解
  9. Android基础--tools:context=.TestActivity作用
  10. redis为什么是单线程_面试官:Redis单线程为什么执行效率这么高?