socket有关的一些扩展函数介绍
与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有关的一些扩展函数介绍相关推荐
- Socket.IO for Unity 简要介绍
在项目中使用到了Socket.IO for unity这个Asset Store上免费的库,这里将简要的介绍一下它的结构,已经使用中的注意事项. 目录结构 上面为包的目录结构,简单的介绍一下具体的内容 ...
- linux socket 中的backlog参数介绍
问题 我们在linux上服务器起了一个serversocket,并且设置了backlog为2,并没有让serversock.accept() 在客户端上,我们一个一个的启动了连接socket, 当连接 ...
- 同步和异步Socket多线程编程基本模型介绍
多线程: 0. 多线程的概念: 多线程是这样一种机制,它允许在程序中并发执行多个线程,且每个线程彼此间互相独立. 并发的理解: 多个线程的执行是并发的,也就是在逻辑上"同时&quo ...
- 基于socket.io的php扩展介绍---phpsocket.io
工具地址:https://github.com/walkor/phpsocket.io phpsocket.io是由workerman根据socket.IO扩展的用于php服务端通讯组件,后台服务用w ...
- Socket网络编程心跳包介绍
跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着.事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一 ...
- linux socket recv函数 MSG_PEEK标志介绍
考虑下面的场景,server向client发送数据"_META_DATA_\r\n_USER_DATA_",要求"\r\n"之前的数据_META_DATA_在第 ...
- socket通信简单介绍
"一切皆Socket!" 话虽些许夸张,可是事实也是,如今的网络编程差点儿都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间怎样通 ...
- socket编程基础2(socket API函数介绍)
"一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信 ...
- 用C#的Raw Socket实现网络封包监视
<script language="javascript" src="/ad/js/edu_left_300-300.js" type="tex ...
最新文章
- (DML触发器)如何正确理解触发器的deleted表和inserted表(转)
- 大数据分析决策平台问题总结
- 批量将PNG转为JPG
- 怎么写字_写字楼外卖员不让进怎么办?写字楼外卖柜提供解决方案!
- vue内容横向循环滚动_vue文字横向滚动公告
- 惊了!日本街头出现透明公厕,竟有人排队抢着上!
- Oracle从小白到大牛的刷题之路(建议收藏学习)
- python写字板_pywinauto简单操作写字板的例子
- 关于 RGB 的颜色认知
- 通用知识图谱的构建及在QQ浏览器的应用实践
- mysql免安装版配置百度_mysql -5.7.10 免安装版配置
- 【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法
- 数据库pgAdminIII导入sql文件
- 【转载+整理】EJB(三) EJB分层架构
- Deeping Learning学习与感悟——《深度学习工程师》_4
- 用户运营day3——用户生命周期与用户成长路径的策略运营
- php正则国外手机号码,php--最新正则(手机号码)
- 一文带你了解机器翻译
- linux笔记:使用conda命令管理包、管理环境详细讲解
- su - root 和 su root 的区别
热门文章
- PADS Router VX.2.3 设置光标的类型
- FieldGroup绑定的日期类型存储格式的问题
- C# 数组 二维数组
- mac 10.12显示隐藏文件
- flash特效原理:螺旋效果 (3)
- sigprocmask理解
- 很有趣的问题,Public继承和默认的集成
- Android setFocusableInTouchMode 方法使用和源码详解
- Android基础--tools:context=.TestActivity作用
- redis为什么是单线程_面试官:Redis单线程为什么执行效率这么高?