使用される単純なサーバーの基本的な機能を作成します

A、ソケット()
ヘッダの#includeは<sys / socket.h>に
機能プロトタイプ:INTソケット(INTドメイン、INT型、INTプロトコル);
アクション:ソケットを作成します。

パラメータドメイン:アドレスを指定しますどのような種類の使用。デフォルトAF_INET。
EG:
IPv4ネットワーク通信AF_INET
AF_INET6 IPv6ネットワーク通信
AF_PACKETリンク層通信は
AF_UNIX、AF_LOCALローカル通信

パラメータのタイプ:ソケットタイプ。SOCK_STREAMデフォルト。
EG:
1、SOCK_STREAMは、すべてのデータは、(接続転送する前、すなわち、TCPは、OOBメカニズムをサポートし、接続状態を確立するために)使用する必要があり、連続的かつ信頼性の高い双方向のデータの流れを提供する。
2、SOCK_DGRAM不連続信頼できない接続のパケットUDPベースの
継続的な信頼性の高い接続パケット設ける3、SOCK_SEQPACKET
4、SOCK_RAW元のネットワークプロトコルは、アクセスを提供
5、SOCK_RDMは、信頼性の高いデータパケット接続を提供
6、SOCK_PACKETは直接通信し、ネットワークドライバを提供する。プロトコルは、ソケットを指定するために使用されトランスポートプロトコル番号は、通常、この参照を無視しない、0に設定することができます

パラメータプロトコル:プロトコル番号。これは、現在のプロトコルファミリおよびシステムのデフォルトの組み合わせの種類の選択を示し、0に設定することができます
:EG
IPPROTO_TCP行くIPPTOTO_UDP IPPROTO_SCTP IPPROTO_TIPCTCP
TCPトランスポートプロトコルUDPトランスポートプロトコルSTCPトランスポートプロトコルトランスポートプロトコルTIPCを

 

二、バインド()
ヘッダーます。#include <sysの/ socket.h>に
関数プロトタイプ:int型バインド(int型数sockfd、constの構造体のsockaddr * addrは、のsocklen_t addrlenは);
アクション:アドレスファミリ固有のソケットに割り当てられたアドレス。

パラメータは、数sockfd:ソケット()関数は、一意のソケットを識別する作成を通じてそれは、あるソケット記述子。バインド()関数は、名前の結合を記述するために言葉を与えることです。

パラメータADDR:プロトコルアドレス数sockfdに結合するA constの構造体のsockaddr *のポインタ。アドレスはソケットを作成しているプロトコルスイートのアドレスに応じて、アドレス構造が異なっています。
IPV4:
構造体in_addr形式

{

uint32_t s_addr; / * 32ビットのIPv4アドレスは、* /
};

のsockaddr_inをストラクト
{
* / / * //アドレスファミリ; sin_familyはsa_family_t

sin_portはin_port_t; / * 16ビットTCP / UDPポート番号* /
構造体in_addr形式sin_addr; / * 32ビットのIPアドレス* /

}。


パラメータはaddrlenは:アドレス構造体の長さを。

 


三,listen()
头文件:#include<sys/socket.h>
函数原型:int listen(int sockfd, int backlog);
作用:如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求。

参数sockfd:即为要监听的socket描述字

参数backlog:相应socket可以排队的最大连接个数。

 

四,connect()
头文件:#include<sys/socket.h>
函数原型:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
作用:将套接字连接到目的地址,客户端通过调用connect函数来建立与TCP服务器的连接。

参数sockfd:为客户端的socket描述字

参数addr:为服务器的socket地址

参数addrlen:为socket地址的长度

 

五,accept()
头文件:#include<sys/socket.h>
函数原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); //返回连接connect_fd
作用:TCP服务器端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。TCP客户端依次调用socket()、connect()之后就向TCP服务器发送了一个连接请求。TCP服务器监听到这个请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。
关键点
*accept()会创建一个新的socket,并且正是这个新的socket会与执行connect()的对象socket进行连接。
返回值:accept()的返回结果是已经连接的socket文件描述符


六,close()
头文件:#include <unistd.h>
函数原型:int close(int fd);
作用:在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字

おすすめ

転載: www.cnblogs.com/yxbl/p/12078538.html
おすすめ