socket(4):listen,connect,accept,recv,send

socket(4):listen,connect,accept,recv,send

  • 1. socket接口-listen
  • 2. socket接口-connect
  • 3. socket接口-accept
  • 4. socket接口-recv
  • 5. socket接口-recv,send

1. socket接口-listen

int listen(int sockfd, int backlog);
如果作为一个服务器,在调用socket()、bind()之后就会调用listen()来监听这个socket
第一个参数即为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数

2. socket接口-connect

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
客户端通过调用connect函数来建立与TCP服务器的连接
参数:

connect函数的第一个参数即为客户端的socket描述字,
第二参数为服务器的socket地址,
第三个参数为socket地址的长度。

3. socket接口-accept

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
TCP服务器监听到客户端请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。
参数:

第一个参数为服务器的socket描述字
第二个参数为指向struct sockaddr *的指针,用于返回客户端的协议地址
第三个参数为客户端协议地址的长度

返回值:
accept()接受一个客户端的连接请求,并返回一个新的套接字,不同于server端的socket()返回用于监听和接受客户端的连接请求的套接字;与客户端通信是通过这个新的套接字上发送和接收数据来完成的。

4. socket接口-recv

5. socket接口-recv,send

待TCP连接完成后,可以调用网络I/O进行读写操作了,即实现了网咯中不同进程之间的通信!网络I/O操作有下面几组:

•read()/write() 
•recv()/send() 
•readv()/writev() 
•recvmsg()/sendmsg() 
•recvfrom()/sendto()

它们的声明如下:
#include 
	ssize_t read(int fd, void *buf, size_t count);
	ssize_t write(int fd, const void *buf, size_t count);
	//read函数是负责从fd中读取内容。
	读成功时,read返回实际所读的字节数,如果返回的值是0表示已经读到文件的结束了,小于0表示出现了错误。

	//write函数将buf中的nbytes字节内容写入文件描述符fd。
	成功时返回写的字节数。失败时返回-1,并设置errno变量。

#include 
#include 
	ssize_t send(int sockfd, const void *buf, size_t len, int flags);
	ssize_t recv(int sockfd, void *buf, size_t len, int flags);
	//recv函数和send函数提供了read和write函数一样的功能
	不同的是他们提供了四个参数。前面的三个参数和read、write函数是一样的。第四个参数可以是0或者是以下组合
	
	ssize_t sendto(int sockfd, const void *buf, size_t len, int  flags,const struct sockaddr *dest_addr, 		socklen_t addrlen);
	ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
             struct sockaddr *src_addr, socklen_t *addrlen);
	ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
	ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);

你可能感兴趣的:(网络,socket,listen,connect,accept,recv)