IP地址的转换
#include <arpa/inet.h>
int inet_aton(const char *strptr,
struct in_addr *addrptr);
//将strptr字符串转换成32位的网络字节序(二进制值--a.b.c.d->32)。
int_addr_t inet_addr(const char *strptr)
//功能通上,返回地址。
in_addr addr;
addr.s_addr = inet_addr("192.168.2.103");
char *inet_ntoa(stuct in_addr inaddr);//32位IP->a.b.c.d形式的
//将32位网络字节序二进制地址转换成点分十进制的串
a代表ASCII,n代表network。
网络、主机字节序转换函数
主机序转换到网络序:
u_short htons (u_short short);
u_long htonl (u_long hostlong);
网络序转换到主机序:
u_short ntohs (u_short short);
u_long ntohl (u_long hostlong);
h(host),n(network),l(long),s(short)
通过主机名访问网络
主机结构体
struct hostent
{
char *h_name;//主机的正式名称
char *h_aliases;//主机的别名
int h_addrtype;//主机的地址类型 AF_INET
int h_length;//主机的地址长度
char **h_addr_list;//主机的IP地址列表
}
#define h_addr h_addr_list[0] //主机的第一个IP地址
struct hostent *gethostbyname(const char *hostname)
socket
通用地址结构:
struct sockaddr
{
u_short sa_family;//协议族
char sa_data[14];//地址协议
}
Internet协议地址结构
struct sockaddr_in
{
short int sin_family;//协议族
unsigned short int sin_port;//端口号
struct in_addr sin_addr;//协议特定地址
unsigned char si_zero[8];//未使用,填0
}
一般使用与sockaddr等价的sockaddr_in数据结构
IPv4地址结构
struct in_addr
{
u_long s_addr;
}
创建一个socket
int socket(int domain, //协议族
int type, //套接字类型
int protocol) //标识位
头文件:
#include <sys/types.h>
#include <sys/socket.h>
参数的选项:
domain
AF_INET//internet协议
AF_UNIX//unix internal协议
AF_NS//Xerox NS协议
AF_IMPLINK//Interface Message协议
type
SOCK_STREAM//流式socket
SOCK_DGRAM//数据报socket
SOCK_RAW//raw socket
protocol参数通常设置为0
返回值:
成功返回socket的描述符,
失败返回-1.

用于绑定IP地址和端口号到socket
int bind(int sockfd, //由socket调用返回的文件描述符。
struct sockaddr *my_addr, //指向sockaddr_in结构的指针,包含server IP的地址和端口号。
int addrlen); //sockaddr结构的长度(sizeof(sockaddr_in))。
返回值:
成功0,失败-1;
设置服务器能处理的最大连接要求
#include <sys/socket.h>
int listen(int sockfd, //监听连接的socket。
int bakclog) //请求排队的最大长度。
listen()将bind的文件描述符变为监听套接字
返回值:
文件描述符或-1;
等待客户端的socket连接请求
int accept (int sockfd, //listen后的文件描述符,接收客户端连接的Socket。
struct sockaddr *addr, //接收外来连接的地址信息。(若不需要可设置NULL)
socklen_t *addrlen); //addr结构的长度。
返回值:
成功:新连接的Socket,(并使用其与客户进行通讯,原Socket继续接受其它客户的连接)。
失败:-1
与服务器建立连接
int connect(int sockfd, //socket返回的文件描述符
struct sockaddr *serv_addr, // 服务器端的连接信息,.sin_add是服务端地址
int addrlen) //serv_addr的长度
头文件:
#include <sys/types.h>
#include <sys/socket.h>
返回值:
0或-1;
关闭双向通道
int close (int sockfd);
int shutdown(int sockfd,
int howto) //SHUT_RD关闭读终端,SHUT_WR关闭写终端。
返回值:
成功:0
失败:-1
接收、发送数据(TCP)
ssize_t recv(int socket, void *buffer, size_t length, int flages);//接收数据
ssize_t send(int socket, const void *buffer, size_t length, int flags)//发送数据
头文件:
#incldue <sys/socket.h>
参数:
socket: 已经连接的Socket。
buffer: 指向用于接收数据的缓冲区的指针。
length: 缓冲区的大小(字节)。
flags: MSG_OOB或0(send()还有etc).
返回值:
成功接收或发送的字节数。
失败返回-1,并设置errno。
recv返回0,连接断开。
接收、发送数据(UDP)
头文件:
#include < sys/types.h >
#include < sys/socket.h >
接收远程主机经指定的socket传来的数据(接收)
ssize_t recvfrom(int sockfd, //套接字描述符
void *buf, //缓冲区
int len, //可接收数据的最大长度.
unsigned int flags, //一般设0,
struct sockaddr *from, //指定欲传送的网络地址
socket_t *fromlen); //结构长度
ssize_t 相当于 int,socket_t 相当于int 。
成功则返回接收到的字符数,
失败返回-1.
将数据由指定的socket传给对方主机(发送)
int sendto ( int s , //已建好连线的socket,如果利用UDP协议则不需经过连线操作
const void * msg, //发送缓冲区
int len, // 发送的数据大小
unsigned int flags, //一般设0
const struct sockaddr * to , //指定欲传送的网络地址
int tolen ) //sockaddr的结果长度
返回值
成功则返回实际传送出去的字符数,
失败返回-1,并设置errno 。
使用文件描述符的函数处理套接字时的行为
- UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数
UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数 gethostname() getppername() getsockname() gethostbyname() ...
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级 ...
- UNIX环境高级编程——sigqueue、sigsuspend函数
一.sigqueue函数 功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用. int sigqueue(pid_t pid, int sig, ...
- (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (七) 一起学 Unix 环境高级编程(APUE) 之 进程关系 和 守护进程
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
随机推荐
- Java并发编程之并发工具类
CountDownLatch CountDownLatch可以用于一个或多个线程等待其他线程完成操作. 示例代码 private static CountDownLatch c = new Count ...
- seq2seq-chatbot:200 行代码实现聊天机器人
Chatbot in 200 lines of code CPU 跑不动 github:https://github.com/zsdonghao/seq2seq-chatbot 更多英文,中文聊天机器 ...
- Redis实现单点登录
http://blog.csdn.net/WuCourage/article/details/77802812
- 好用的jquery.animateNumber.js数字动画插件
在做公司的运营报告页面时,有一个数字累计增加的动画效果,一开始,毫无头绪,不知如何下手,于是上网查资料,发现大多都是用的插件来实现的,那么今天,我也来用插件jquery.animateNumber.j ...
- Luogu P3740 [HAOI2014]贴海报_线段树
线段树版的海报 实际上这个与普通的线段树相差不大,只是貌似数据太水,暴力都可以过啊 本来以为要离散的,结果没打就A了 #include<iostream> #include<cstd ...
- 游戏流程&游戏规则
- 托管C++、C++/CLI、CLR
1.什么是托管C++? 在回答这个问题,首先要搞清楚什么是"托管"(Managed).托管是.NET的一个专门概念,它是融于通用语言运行时(CLR)中的一种新的编程理念,因此我们完 ...
- Go 语言条件语句
条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句. 下图展示了程序语言中条件语句的结构: Go 语言提供 ...
- Android开发学习之路--性能优化之常用工具
android性能优化相关的开发工具有很多很多种,这里对如下六个工具做个简单的使用介绍,主要有Android开发者选项,分析具体耗时的Trace view,布局复杂度工具Hierarchy Vie ...
- OpenCV+VS2013 属性表配置
简介 计算机视觉任务越来越多的依赖著名的开源计算机视觉库OpenCV.OpenCV 2.0 包含了一系列精心设计数据结构和经过优化的视觉算法,大家可以短时间内开发一个不错的视觉应用.OpenCV支持多 ...