socket编程常用函数
感谢原作者分享 http://blog.csdn.net/leumber/article/details/64129607
1.socket
int socket(int doamin,int type,int pro);
功能:通过该函数可以创建一个socket套接字文件,并返回该文件的描述符。
参数:domain
PF_INET 表示是个互联网程序
PF_UNIX 表示域内套接字,支持单机进程通信
注:这几个参数有AF_UNIX=AF_LOCAL, PF_UNIX=PF_LOCAL, AF_LOCAL=PF_LOCAL, AF_INET=PF_INET.
参数:type
SOCK_STREAM流式套接字
SOCK_DGRAM 数据报套接字
SOCK_RAW 原始套接字
pro 具体的应用层协议类型,如果该值不清楚,则用0 表示系统自动匹配
返回值:成功 返回一个文件描述符
失败 -1
2.bind
int bind(int sockfd,struct sockaddr * my_addr,int addrlen);
功能:通过该函数可以将本地的ip地址与之前的socket文件描述符关联起来。
参数:sockfd 之前已经创建的套接字id
struct sockaddr ip地址结构体
struct sockaddr
{
u_short sa_family; //地址族 ===》PF_INET/AF_INET
char sa_data[14]; //14字节的ip地址信息。协议地址信息。
};//通用地址结构
struct sockaddr_in
{
u_short sin_family; // 地址族 PF_INET/AF_INET
u_short sin_port; //端口 数字
struct in_addr sin_addr;// ip地址 整形数字
};
注意:端口和ip信息要处理后加载
struct sockaddr_un
{//域内套接字用
sa_family_t sun_family; /*PF_UNIX或AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* 路径名 */
};
struct in_addr
{
in_addr_t s_addr; /ip地址转换成整数后的值
}
addrlen:参数2的所占内存空间长度,一般用 sizeof(struct sockaddr_in);
返回值:成功 0
失败-1
3.listen
int listen(int sockfd,int backlog);
功能:该函数用于检测sockfd对应的设备文件上有多少个连接进来。
参数:sockfd 之前已经打开并bind的文件描述符
backlog 允许同时接入连接的个数。
返回值:成功 0
失败 -1
4.accept
int accept(int sockfd,struct sockaddr* addr,socklen_t * addrlen);
功能:该函数用于服务器端接收一个连接进来
参数: sockfd 文件描述符id
addr 连接方的ip地址信息。如果不关心对方的地址,则该值可以为NULL;
addrlen 参数2的内存区长度的地址值,一般用len = sizeof(struct sockaddr);&len
注意:该函数默认情况下是阻塞等待客户端的连接
返回值:成功 0 返回一个新的文件描述符,专门用于之后的通信过程
失败 -1
5.connect
int connect(int sockfd,struct sockaddr* seraddr,int addrlen);
功能:从客户端向服务器发起一次连接请求
参数:sockfd 之前通过socket()函数成功打开的文件描述符 = 它的返回值
seraddr 服务器端的ip地址+端口信息
addrlen 参数2的内存占用大小,一般是 sizeof(struct sockaddr)
返回值:成功 0
失败-1
6.send
ssize_t send(int sockfd,const void * buff,size_t len,int flags);
功能:用于TCP通信过程中的发送数据
参数:sodkfd 如果是服务器端则改值等于accept的返回值新建的fd
如果是客户端则该值等于原始的sockfd;
buff 要发送的数据内存区,一般用数组或者动态申请的内存
len 要发送的数据长度
flags 表示阻塞方式发送数据 0 不阻塞 1 阻塞
返回值:成功 实际发送的字节长度
失败 -1
7.recv
ssize_t recv(int sockfd,void * buff,size_t len ,int flags);
功能:用于TCP 通信过程中的接收数据
参数:sodkfd 如果是服务器端则改值等于accept的返回值新建的fd
buff 要接收的数据内存区,一般用数组或者动态申请的内存。
len 要接收的数据长度。一般是sizeof(buff)
flags 表示阻塞方式接收数据
返回值:成功 接收到的字节数
失败 -1
8.close
int close(int fd);
功能:关闭指定的文件描述符即可,如果是服务器端关闭新fd和原始fd
返回值:成功 0
失败 -1
在使用读写函数时需要注意
send 、 recv 用于TCP 通信
sendto 、recvfrom 用于UDP通信
write 、read 可用于TCP UDP 通信
在使用本地socket时只能使用read和write
9.ulink()函数
int unlink(const char* pathname);
功能:unlink从文件系统中删除一个名字,若这个名字是指向这个文件的最后一个链接,并且没有进程处于打开这个文件的状态,则删除这个文件,释放这个文件占用的空间。
如果这个名字是指向这个文件的最后一个链接,但有某个进程处于打开这个文件的状态,则暂时不删除这个文件,要等到打开这个文件的进程关闭这个文件的文件描述符后才删除这个文件。
如果这个名字指向一个符号链接,则删除这个符号链接。
如果这个名字指向一个socket、fifo或者一个设备,则这个socket、fifo、设备的名字被删除,当时打开这些socke、fifo、设备的进程仍然可以使用它们。
返回值:成功0
失败-1
socket编程常用函数相关推荐
- VxWorks编程常用函数说明
VxWorks编程常用函数说明 一.官方的Program Guide 位于安装目录下:\docs\vxworks\guide\index.html 二.常用的库: #include "tas ...
- 笔试编程常用函数(Java)
笔试编程常用函数(Java) 处理对象为String 数组相关 集合相关 (今天太晚了,以后再慢慢写) 处理对象为String 将String对象按某规则分割: String[] split(Stri ...
- linux网络编程常用函数详解与实例(socket--bind--listen--accept)
常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...
- WinPcap编程常用函数和数据结构
WinPcap编程实质上就是对各种函数的熟悉和调用,因此本节对前面稍微做一下小结,对所用到的函数及数据类型进行归纳和总结,一是为了回顾所掌握的知识,二是加深印象,便于后面更好地学习. 常用函数和结构体 ...
- windows下socket编程GetLastError()函数返回结果与对照表-转
原文地址:http://blog.sina.com.cn/s/blog_4880c4bb0100b6a5.html WSAGetLastError()函数返回结果与对照表: Windows Socke ...
- socket编程---send函数recv函数详解
一.send函数 函数原型:int send( SOCKET s,char *buf,int len,int flags ); 功能:不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端 ...
- 基于树莓派的python GPIO编程-常用函数综合整理
Hello,朋友们大家好,欢迎大家来到LIUSE网络. 随着Mini型PC越来越多,与之而来的创客也丰富起来,比如说Arduino就是一个非常好里例子. 不过,Arduino毕竟是一块适合入门型的基础 ...
- linux下socket编程读写函数
linux下socket编程,实现服务器与客户端的通信之后,在同一个虚拟机上,打开两个shell,一个运行服务器程序,一个运行客户端程序,课相互发送数据. 如果使用的是recv接收函数,当关闭客户端或 ...
- socket通信常用函数
转自网上资料 accept(接受socket连线) 相关函数 socket,bind,listen,connect 表头文件 #include<sys/types.h> #include& ...
- Linux socket 网络编程常用函数总结
1.字节序函数 #include <netinet.h> uint16_t htons(uint16_t host16bitvalue); uint32_t htonl(uint32_t ...
最新文章
- CentOS 7 yum 安装 MySQL5.7
- 得力人脸识别考勤机密码设置_百度大脑人脸识别公有云日均调用量过亿 成为业内第一...
- c++连连看游戏_用Python玩连连看是什么效果?
- Elasticsearch script使用详解
- .Net Core集成Office Web Apps(一)
- 对接物联网设备tcp协议_什么是物联网?常见IoT协议最全讲解
- 安徽对口计算机本科分数线,考试查询网:安徽对口高考录取分数线
- IBM小型机安装AIX系统
- 反证法与归谬法的区别
- R包安装--以4.1.2安装DMwR为例
- 路由器、交换机、猫(Modem)、LAN、WAN、WLAN、VLAN基本概念
- 浙江新青年计算机学校,新青年
- C# 串口CRC CCITT-FALSE 校验
- Professional Microsoft Office SharePoint Designer 2007
- python基础教程:python+OpenCV实现车牌号码识别
- 破开C语言暗夜的第二道光 —— 数据与数据类型(1)
- 微信JS-SDK的使用
- composer 详解
- 《华尔街》观后笔记9——拯救危机
- 【剑指offer38】全排列问题-递归的运用
热门文章
- python登录微信pc版_微信PC版内测更新,又增加2个实用功能
- ftl模板导出excel_ftl方式导出excel
- 百度富文本ueditor实现导入word并将内容显示到编辑器中
- easyar 实现模型的旋转和缩放
- 好用的安卓手机投屏电脑软件
- freeradius mysql nas_freeradius+mysql+交换机认证
- 利用Python爬取3万多条上海二手房信息,我得出的结论是?
- linux java sqlldr_sqlldr用法详解
- 神思SS628(100)型第二代身份证验证阅读机具二次开发
- K均值算法(K-means)聚类