首页 > 编程知识 正文

linux socket原理,linux下socket编程实例

时间:2023-05-03 22:43:56 阅读:186077 作者:3549

intsocket(intdomain,int type,int protocol );

功能:创建套接字,

返回值:成功:向新创建的套接字返回文件描述符,失败:-1,设置错误

参数:

域名:

AF_INET这是用于生成套接字的大多数协议,通过TCP或UDP传输,并使用IPv4地址

AF_INET6与上述类似,只是来使用IPv6的地址

AF_Unix本地协议用于UNIX和Linux系统,当客户端和服务器位于同一台和其上时使用

类型:

SOCK_STREAM协议是基于序列、可靠且数据完整的字节流的连接。 这是使用最多的套接字类型,使用TCP进行传输。

名为SOCK_DGRAM的协议是未连接的固定长度的传输呼叫。 这个协议不可靠。 使用UDP连接。

SOCK_SEQPACKET该协议通过两条线路的可靠连接发送和传输固定长度的数据包。 如果不完全接受这个包的话就不能读取。

SOCK_RAW socket类型提供使用ICMP公共协议的单个网络访问。 (ping,traceroute使用此协议)

SOCK_RDM这种类型很少使用,大多数操作系统都没有实现,而是提供给数据链路层使用,包的顺序没有保证

协议:

如果传递0,将使用默认协议。

intbind(intsockfd,const struct sockaddr *addr,socklen_t addrlen );

功能:绑定固定的网络地址和端口号

返回值:正常返回0,失败后返回-1,设置errno

参数:

sockfd :

套接字文件描述符

addr:

构建IP地址和端口号

addrlen:

大小(addr )的长度

struct sockaddr *是一种通用指针类型,addr参数实际上可以接受多个协议的sockaddr结构,每个结构的长度都不一样,因此第三个参数addrlen必须指定结构的长度

注意:绑定Ip和端口新的结构体定义是struct sockaddr_in类型,所以传参数时要注意强转;

struct sockaddr_in servaddr;

bzero(servaddr,sizeof ) (servaddr );

servaddr.sin_family=AF_INET;

servaddr.sin _ addr.s _ addr=htonl (in addr _ any );

Servaddr.sin_port=htons(6666;

intlisten(intsockfd,int backlog );

功能:可以监听多少呼叫方并开始连接? 如果大于backlog,则将其忽略,下次继续监听。注意:这不是限制客户端最大连接数

成功回到0,失败回到-1

参数:

sockfd:

套接字文件描述符

backlog:

为了制作3次握手队列而排队的列、和刚制作3次握手队列的链接数

intaccept(intsockfd,struct sockaddr *addr,socklen_t *addrlen );

功能:等待与客户端的连接请求,连接成功后返回新fd和客户端的通信返回值。 成功返回用于与客户端通信的新套接字文件描述符。 失败后返回-1。 设定错误

客户端所需的函数:

intconnect(intsockfd,const struct sockaddr *addr,socklen_t addrlen );

功能:客户端必须通过调用connect ()连接到服务器。 c onnect和bind的参数形式一致,区别在于bind的参数是自己的地址,而connect的参数是对方的地址

返回值: connect ()成功返回0,错误返回-1。

参数:

sockdf:

套接字文件描述符

addr:

指定服务器端地址信息,包括传入参数、IP地址和端口号

addrlen:

传递参数,并将大小传递给sizeof(addr )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。