LINUX应用编程 – 网络编程篇
2015-03-15 17:24
337 查看
[b]地址转换函数[/b]:
1.将字符串的IP地址转换成网络字节序的地址
in_addr_t inet_addr(const char *strIP);
若成功,返回32位网络字节序的地址,若出错,则返回INADDR_NONE 不建议使用,因为255.255.255.255这个地址无法被转换
int inet_aton(const char *strIP, struct in_addr *addr);
若成功,返回非0,若地址字符串有错,返回0,仅转换IPV4地址
int inet_pton(int family, const char *strptr, void *addrptr);
返回:1成功,0-输入不是有效的表达式,-1出错 Family:AF_INET6,AF_INET
2.将网络字节序的地址转换成字符串的IP地址
char *inet_ntoa(struct in_addr inaddr);
返回:指向字符串IP的指针。非线程安全,在多线程时避免使用 例:char *ip = inet_ntoa(addr.sin_addr);
const char *inet_ntop(int family, const void *addr, char *strIP, size_t len);
参数:family – 地址族,值为AF_INET或AF_INET6 addr – 需要转换的地址 返回:指向字符串IP的指针,失败返回NULL; 例:char ip[64]; inet_ntop(AF_INET, &addr.sin_addr, ip, 64);、
[b]创建套接字[/b]
1. socket() int socket(int family, int type, int protocol);
功能描述:创建套接字文件描述字。 参数:family – 协议族(网络层) PF_INET -------- IPV4协议 PF_INET6-------- IPV6协议
PF_LOCAL-------- UNIX域协议(PF_LOCAL) PF_ROUTE------- 路由套接口 type – 套接字类型 SOCK_STREAM -------- 字节流套接口(TCP及AC_LOCAL时) SOCK_DGRAM --------- 数据报套接口(UDP及AC_LOCAL时) protocol – 取0 返回:成功为非负描述字,失败返回-1 例子:int fd = socket(PF_INET, SOCK_STREAM, 0);
2. connect()
int connect(int sock, const struct sockaddr *addr, socklen_t len);
功能描述:建立从客户端到服务器的连接 返回:成功返回0,失败返回-1
3 recv() int recv(int sock, void *buf, int size, int flag);
功能描述:从sock套接字接收数据。服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将阻塞。也可以使用recv接收面向连接的UDP的报文。
参数 sockfd:套接字描述符 buf:指向内存块的指针 size:内存块大小,以字节为单位 flags:一般为0 返回: >0 接收到的字节个数 -1 接收失败(EAGAIN-套接字非阻塞, EINTR表示被信号中断) 0 对方连接已关闭,说明套接字已经不可用,需要重新建立连接
4 send() ssize_t send(int sock, const void *buf, size_t len, int flags);
功能 在TCP连接上发送数据,返回成功传送数据的长度,出错时返回-1。 send会将外发数据复制到OS内核中,也可以使用send发送面向连接的UDP报文。
参数说明: sock:套接字描述符 data:指向要发送数据的指针 data_len:数据长度 flags:一直为0
5 close() int close(int s); 功能 关闭套接字。
参数说明: s – 要关闭的套接字
connect程序
1.将字符串的IP地址转换成网络字节序的地址
in_addr_t inet_addr(const char *strIP);
若成功,返回32位网络字节序的地址,若出错,则返回INADDR_NONE 不建议使用,因为255.255.255.255这个地址无法被转换
int inet_aton(const char *strIP, struct in_addr *addr);
若成功,返回非0,若地址字符串有错,返回0,仅转换IPV4地址
int inet_pton(int family, const char *strptr, void *addrptr);
返回:1成功,0-输入不是有效的表达式,-1出错 Family:AF_INET6,AF_INET
2.将网络字节序的地址转换成字符串的IP地址
char *inet_ntoa(struct in_addr inaddr);
返回:指向字符串IP的指针。非线程安全,在多线程时避免使用 例:char *ip = inet_ntoa(addr.sin_addr);
const char *inet_ntop(int family, const void *addr, char *strIP, size_t len);
参数:family – 地址族,值为AF_INET或AF_INET6 addr – 需要转换的地址 返回:指向字符串IP的指针,失败返回NULL; 例:char ip[64]; inet_ntop(AF_INET, &addr.sin_addr, ip, 64);、
[b]创建套接字[/b]
1. socket() int socket(int family, int type, int protocol);
功能描述:创建套接字文件描述字。 参数:family – 协议族(网络层) PF_INET -------- IPV4协议 PF_INET6-------- IPV6协议
PF_LOCAL-------- UNIX域协议(PF_LOCAL) PF_ROUTE------- 路由套接口 type – 套接字类型 SOCK_STREAM -------- 字节流套接口(TCP及AC_LOCAL时) SOCK_DGRAM --------- 数据报套接口(UDP及AC_LOCAL时) protocol – 取0 返回:成功为非负描述字,失败返回-1 例子:int fd = socket(PF_INET, SOCK_STREAM, 0);
2. connect()
int connect(int sock, const struct sockaddr *addr, socklen_t len);
功能描述:建立从客户端到服务器的连接 返回:成功返回0,失败返回-1
3 recv() int recv(int sock, void *buf, int size, int flag);
功能描述:从sock套接字接收数据。服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将阻塞。也可以使用recv接收面向连接的UDP的报文。
参数 sockfd:套接字描述符 buf:指向内存块的指针 size:内存块大小,以字节为单位 flags:一般为0 返回: >0 接收到的字节个数 -1 接收失败(EAGAIN-套接字非阻塞, EINTR表示被信号中断) 0 对方连接已关闭,说明套接字已经不可用,需要重新建立连接
4 send() ssize_t send(int sock, const void *buf, size_t len, int flags);
功能 在TCP连接上发送数据,返回成功传送数据的长度,出错时返回-1。 send会将外发数据复制到OS内核中,也可以使用send发送面向连接的UDP报文。
参数说明: sock:套接字描述符 data:指向要发送数据的指针 data_len:数据长度 flags:一直为0
5 close() int close(int s); 功能 关闭套接字。
参数说明: s – 要关闭的套接字
connect程序
#include <unistd.h> #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <pthread.h> int main() { int sock,size; uint16_t port = 8000; const char *IP = "192.168.7.118"; char buf[1024] = "songlongfei"; struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); sock = socket(AF_INET,SOCK_STREAM,0); addr.sin_family = AF_INET; addr.sin_port = htons(port); inet_pton(AF_INET,IP,&addr.sin_addr); if(connect(sock,(struct sockaddr*)&addr,sizeof(addr)) != 0) printf("Connect failed\n"); while(1) { fgets(buf,sizeof(buf),stdin); if((size = send(sock,buf,sizeof(buf),0)) < 0) printf("send failed\n"); else printf("Connect succ!\n"); recv(sock,buf,sizeof(buf),0); printf("%s\n",buf); } close(sock); }
相关文章推荐
- linux网络设备应用与驱动编程学习4——模板与实例(C)——其它方法
- 【Linux的高级应用编程】网络编程中并发服务器的设计模式
- Linux网络编程:gethostbyname()的应用
- Linux网络应用编程之交换机概述
- 【原创】《Linux高级程序设计》杨宗德著 - UDP网络编程应用 分类: Linux --- 应用程序设计 2014-12-11 14:41 73人阅读 评论(0) 收藏
- linux网络设备应用与驱动编程学习3——lpc3250以太网控制器
- 【linux草鞋应用编程系列】_5_ Linux网络编程
- Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册
- linux网络设备应用与驱动编程学习
- Linux网络应用编程之Packet Tracer安装及界面介绍
- linux网络设备应用与驱动编程学习4——模板与实例(B)——打开和释放方法
- Linux 网络应用开发(二)之socket编程
- 嵌入式成长轨迹22 【Linux应用编程强化】【Linux下的C编程 下】【网络编程】
- linux网络编程之socket(十二):select函数的并发限制和 poll 函数应用举例
- Linux程序设计学习笔记----网络通信编程API及其示例应用
- 嵌入式linux网络编程之connect()函数的高级应用
- linux网络设备应用与驱动编程学习笔记(2)——网络驱动基础
- linux网络编程之socket(十二):select函数的并发限制和 poll 函数应用举例
- Linux 网络编程中之心跳机制应用
- Linux高性能server编程——Linux网络基础API及应用