名词:
1.套接字:IP+端口,套接口是端口
2.网络地址:在网络这张大网的唯一编号,IP地址,包含网络ID和主机ID,分为ABCDE类
ABC类网络ID长度分别为8位,16位,24位(IPv4)
A:0.0.0.0~127.255.255.255
B.128.0.0.0~191.255.255.255
C:192.0.0.0~223.255.255.255
D:224.0.0.0~239.255.255.255
E:240.0.0.0~247.255.255.255
最常用的是BC类,刚ping了一下百度220.181.38.150。C类
linux下socket编程可以概括为以下几个函数的运用:
socket():
socket就相当于声明传输格式
socket(PF_INET,SOCK_STREAM,0);
int socket( int af, int type, int protocol);(定义)
af:一个地址描述。仅支持AF_INET格式,也就是说ARPA Internet地址格式。
type:指定socket类型。新套接口的类型描述类型,如TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。
protocol:顾名思义,就是指定协议。套接口所用的协议。如调用者不想指定,可用0。常用的协议有,IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。
返回值是套接字。
bind():
int bind( int sockfd , const struct sockaddr * my_addr, socklen_t addrlen);
sockfd 表示已经建立的套接字;
my_addr 是一个指向sockaddr结构体类型的指针;
addrlen表示my_addr结构的长度,可以用sizeof操作符获得。
listen():
int listen( int sockfd, int backlog);
sockfd:用于标识一个已捆绑未连接套接口的描述字。
backlog:等待连接队列的最大长度。
connect():
int connect(SOCKET s, const struct sockaddr * name, int namelen);
s:标识一个未连接socket
name:指向要连接套接字的sockaddr结构体的指针
namelen:sockaddr结构体的字节长度
accept():
SOCKET accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
sockfd:套接字描述符,该套接口在listen()后监听连接。
addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。Addr参数的实际格式由套接口创建时所产生的地址族确定。
addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数。
recv():
int recv( _In_ SOCKET s, _Out_ char *buf, _In_ int len, _In_ int flags);
该函数的第一个参数指定接收端套接字描述符;
第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;
第三个参数指明buf的长度;
第四个参数一般置0。
recv(client_sockfd,buf,BUFSIZ,0);
send():
int send( SOCKET s, const char FAR *buf, int len, int flags );
(1)第一个参数指定发送端套接字描述符;
(2)第二个参数指明一个存放应用程序要发送数据的缓冲区;
(3)第三个参数指明实际要发送的数据的字节数;
(4)第四个参数一般置0。
close():
close(client_sockfd);
关闭套接字
源码
阿里云服务--我的云小站