编程语言应用

首页 » 常识 » 常识 » Socket网络编程
TUhjnbcbe - 2022/5/6 14:38:00
308治疗白癜风 http://m.39.net/pf/a_8078477.html

Socket编程

Socket概述

Socket用于网络中进程之间的通信,其源于Unix,是Unix/Linux基本思想:“打开—读/写—关闭”的一个实现。可以将Socket理解为一种特殊的“文件”,服务器和客户端各自维护一个"文件",Socket相关函数即为对该文件进行操作(打开、关闭、读/写等),从而实现进程之间的通信。

Socket基本操作

01

socket()

creatingasocket,用于创建一个socket描述符,返回值为套接字,如果出错,则返回-1。

socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socketdescriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。

原型:intsocket(intdomain,inttype,intprotocol);

返回值:returnsfile(socket)descriptorifOK,-1onerror.

domain:AF_INET,AF_INET6,AF_UNIX,AF_UNSPEC(addressformat)

type:SOCK_DGRAM,SOCK_RAW,SOCK_STREAM,SOCK_SEQPACKET

protocol:IPPROTO_IP,IPPROTO_IPV6,IPPROTO_TCP,IPPROTO_UDP

protocol值通常为零,表示采用默认协议。对于SOCK_STREAM、AF_INET下的默认协议为TCP,对于SOCK_DGRAM、AF_INET下的默认协议为UDP。

当我们调用socket()创建一个socket时,返回的socket描述字它存在于协议族(addressfamily,AF_XXX)空间中,但没有一个具体的地址。如果想要给它赋值一个地址,就必须调用bind()函数,否则就当调用connect()、listen()时系统会自动随机分配一个端口。

02

bind()

bindingasockettoanaddress,把套接口绑定到本地计算机的某一个端口上。

原型:intbind(intsockfd,conststructsockaddr*addr,socklen_taddrlen);

返回值:returns0onsuccess,or-1onerror.

参数:sockfd:即socket描述字,它是通过socket()函数创建了,唯一标识一个socket。bind()函数就是给这个描述字绑定一个名字。

通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系统自动分配一个端口号和自身的ip地址组合。这就是为什么通常服务器端在listen之前会调用bind(),而客户端就不会调用,而是在connect()时由系统随机生成一个。

03

listen()

原型:intlisten(intsockfd,intbacklog);

返回值:returns0onsuccess,or-1onerror.

listeningforin

1
查看完整版本: Socket网络编程