socket编程基础

网络IP操作函数

字符串的IP和32位的IP转换

#include <sys/socket.h>

#inlcude <netinet/in.h>

#include <arpa/inet.h>

  • int inet_aton(const char *cp, struct in_addr *inp);
  • in_addr_t inet_addr(const char *cp);
  • in_addr_t inet_network(const char *cp);
  • char *inet_ntoa(struct in_addr in);
  • struct in_addr inet_makeaddr(int net, int host);
  • in_addr_t inet_lnaof(struct in_addr in);
  • in_addr_t inet_netof(struct in_addr in);

  • int inet_pton(int af, const char *src, void *dst);

af:AF_INET, AF_INET6

src:string IP, example:"192.168.103.116"

dst:a network address

return:成功1,src非法返回0,af非法地址返回-1,同时置errno为EAFNOSUPPORT。

#define servip "192.168.1.103"

inet_pton(AF_INET, servip, &servaddr.sin_addr.s_addr);


推荐使用inet_pton()或inet_aton(),而非inet_addr()或inet_network(),因为返回值-1代表IP地址255.255.255.255。

注:网络格式IP为二进制大端格式。

字节转换函数

  • unsigned long int htonl(unsigned long int hostlong);
  • unsigned short int htons(unsigned short int hostshort);
  • unsigned long int ntohl(unsigned long int netlong);
  • unsigned short int ntohs(unsigned short int netshort);

注:h代表host,n代表network,s代表short,l代表long

IP和域名的转换

  • struct hostent gethostbyname(const char hostname);
  • struct hostent gethostbyaddr(const char addr, int len, int type);

#define <netdb.h>

struct hostent {

char *h_name; //主机的正式名称

char *h_aliases; //主机别名

int h_addrtype; //主机的地址类型AF_INET

int h_length; //主机的地址长度,IP4是4字节32位

char **h_addr_list; //主机IP地址列表

}

#define h_addr h_addr_list[0]

这两个函数失败返回NULL,且设置h_errno错误变量,h_strerror()可以得到详细的出错信息。

服务信息函数

在网络程序里面我们有时候需要知道端口,IP和服务信息。

  • int getsockname(int sockfd, struct sockaddr *localaddr, int *addrlen);
  • int getpeername(int sockfd, struct sockaddr *peeraddr, int *addrlen);
  • struct servent *getservbyname(const char *servname, const char *protoname);
  • struct servent *getservbyport(int port, const char protoname);

struct servent {

char *s_name; //正式服务名

char **s_aliases; //别名列表

int s_port; //端口号

char *s_proto; //使用的协议

}

socket编程基础-字节序/IP/PORT转换/域名的更多相关文章

  1. UNIX网络编程——socket概述和字节序、地址转换函数

    一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口.socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网络 ...

  2. socket概述和字节序、地址转换函数

    一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网 ...

  3. socket套接字(字节序、地址转换)

    什么是socket: socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上 不同主机之间的进程通信.IPv4套接口地址结构 struc ...

  4. Socket编程基础——面向连接TCP

    WinSock是Windows环境下的网络编程接口,它最初是基于Unix环境下的BSD Socket,是一个与网络协议无关的编程接口.WinSock包含两个主要版本,即WinSock1和WinSock ...

  5. Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)

    IPv4套接字地址结构 struct sockaddr_in { uint8_t sinlen;(4个字节) sa_family_t sin_family;(4个字节) in_port_t sin_p ...

  6. TCP/IP网络编程之字节序和网络字节序

    一.概要 本篇文章主要讲解基于.net中tcp/ip网络通信编程中的网络字节序.在自我进步的过程中记录这些内容,方便自己记忆的同时也希望可以帮助到大家.技术的进步源自于分享和不断的自我突破. 技术交流 ...

  7. c#socket编程基础

    Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类 ...

  8. Python Socket编程基础篇

    Socket网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

  9. Socket编程--基础(基本server/client实现)

    IPv4套接口地址结构 IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件中 LINUX结构下的常用结构,一般创建套接字的时候都要将这个结构里面的 ...

随机推荐

  1. 【转载】spring mvc 使用session

    http://home.51.com/gaoyangboy/diary/item/10036382.html Spring2.5 访问 Session 属性的四种策略 Posted on 2008-1 ...

  2. JQuery中event的preventDefault和stopPropagation介绍

    event.preventDefault()阻止默认事件行为的触发. event.stopPropagation()防止事件冒泡到DOM树上,也就是不触发的任何前辈元素上的事件处理函数. <!D ...

  3. 从使用 KVO 监听 readonly 属性说起

    01.KVO 原理 KVO 是 key-value observing 的简写,它的原理大致是: 1.当一个 object(对象) 有观察者时候,动态创建这个 object(对象) 的类的子类(以 N ...

  4. Uri编码,包括javascript前端与C#服务器端

    URI编码的方法汇总 javascript中的编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码的主要方法:HttpUtility.UrlEncode. ...

  5. Python rfind()方法

    描述 Python rfind() 返回子字符串最后一次出现在字符串中的索引位置,该方法与rindex() 方法一样,只不过如果子字符串不在字符串中不会报异常,而是返回-1. 语法 rfind() 方 ...

  6. MATLAB(4)——图片保存方法汇总及常用指令

    作者:桂. 时间:2017-03-03  19:30:03 链接:http://www.cnblogs.com/xingshansi/p/6498318.html 前言 本文为MATLAB系列第四篇. ...

  7. 使用命令行工具mysqlimport导入数据

    Usage: mysqlimport [OPTIONS] database textfile ... mysqlimport 程序是一个将以特定格式存放的文本数据(如通过“select * into ...

  8. 国外程序员整理的Java资源大全

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  9. js方法call和apply实例解析

    在js编程中实现继承时 用到了两个很特殊的方法,call和apply. 在ECMAScript v3中,给Function原型定义了这两个方法,这两个方法的作用都是一样的:使用这两个方法可以像调用其他 ...

  10. 如何对多个文件进行MODELSIM仿真? (由于是一个很大的项目,不可能把所有MODULE都放在一个文件里。 如何在ModelSim中对多个.V文件进行仿真?)

    可以将所有要编译的所有文件的名字做一个list.新建一个文本文档,重命名为vflist vflist内容例子如下(src为文件夹):src/base_addr_chk.vsrc/config_mux. ...