【网络通信】socket,bind等基本操作

上篇文章我们已经知道网络中的进程是通过socket来通信的。

TCP/UDP协议通信过程

  • 服务器端调用socket()通信过程:
    socket()—>bind()—>listen()—>accept()—>recv()/recvfrom()—>send()/sendto();
    调用socket()函数创建一个套接字。
    调用bind()函数把自己绑定在一个地址上。
    调用listen()函数监听连接。
    调用accept()函数接受所有引入的请求。
    调用recvfrom()函数获取引入的信息然后调用sendto()回答。
  • 客户端调用socket()通信过程:
    socket()—>connect()—>recv()/recvfrom()—>send()/sendto();
    调用socket()函数创建一个套接字。
    调用connect()发出连接请求;
    调用recvfrom()函数获取引入的信息然后调用sendto()回答。

下面介绍几个基本的socket接口函数:

socket();
socket函数用于创建一个socket描述符(一个指向内部数据结构的指针,它指向描述符表入口),把它作为参数进行一些读写操作。创建成功时,返回非负数的socket描述符;失败则返回-1。创建socket时,socket执行体将建立一个socket,即为一个socket数据结构分配存储空间。可以指定不同的参数创建不同的socket描述符。

函数原型:

int socket(int domain, int type, int protocol);

参数说明:
1. 第一个参数domain指明使用的协议族。常用的协议族有,AF_INET,AF_INET6,AF_LOCAL(或称AF_UNIX,Unix域socket),AF_ROUTE等等。

  • 协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX, 表示这个socket是非网络形式的unix域socket, 可以用来进行非网络形式的进程间通信(本地进程间的通信)。

2.第二个参数type:指定socket类型,常用的类型有三种。
1).SOCK_STREAM:TCP类型。这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。
2).SOCK_DGRAM :UDP类型。这个协议是无连接的、固定长度的传输调用。不保证数据接收的顺序,非可靠连接。
3).SOCK_RAW :原始类型,允许对底层协议如IP或ICMP进行直接访问。
3.第三个参数protocol:公共协议,通常赋值0,由系统自动选择对应默认协议。常用的公共协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等。分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。

注意:type和protocol使用时要对应。

bind();
bind();将创建的socket绑定到指定的IP地址和端口上,即分配一个具体的协议地址,如对应AF_INET、AF_INET6就是把一个ipv4或ipv6地址和端口号组合赋给socket。返回值为0成功,-1则出错。服务器端调用bind(),而客户端不需调用,会在connect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值