TCP基本套接字编程

来源:互联网 发布:十大当红网络主播 编辑:程序博客网 时间:2024/05/29 09:13

客户端需要调用的两个函数:

socket()函数:

#include<sys/socket.h>

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

参数:第一个参数family为协议族,一般为AF_INET, 

   第二个参数是套接字类型,一般为SOCK_STREAM(字节流套接字)

   第三个是一个常量值,对应不同的传输协议,我们可以将它写成0

返回值:返回一个套接字描述符,成功时候返回一个非负整数

说明:为了得到一个套接字描述符,我们使用了协议族,和套接字的类型,并没有指定本地地址和远程协议地址

connect()函数:

#include<sys/socket.h>

int connect(int sockfd, const struct *servaddr, socklen_t addrlen)

参数:第一个参数是得到的套接字描述符,第二个参数是指向套接字地址结构的指针,第三个是地址结构的长度

返回值:成功返回0,出错返回-1

当使用IPV4协议的时候,调用connect()函数会有TCP/IP的三次握手,到了建立成功或者出错时候返回。

connect()函数使得客户端从CLOSE状态转换到了SYN—SENT状态,如果成功则使得客户端的状态变成ESTABLISHED状态,失败的话则必须关闭这个套接字(close()函数)

服务器需要调用的四个函数:

第一也是创建socket套接字

第二调用bind()函数

第三调用listen()函数

第四调用accept()函数

bind()函数:

将本地协议地址赋值给一个套接字,网络协议的协议地址32位IPv4和16位的UDP和TCP端口号的组合

int bind(int sock, const struct sockaddr *myaddr, socklen_t addr)

参数:

第一个是套接字

第一个参数是指向地址结构体的指针

第三个参数是这个地址结构体的长度

成功返回一个非负整数,失败返回-1

listen()函数:

在本地床架一个套接字的时候,这个套接字为主动套接字,自己调用connect()函数

使用listen()函数,使得主动套接字变成被动套接字。

原型:

int listen(int socked, int blog);

参数:

第一个参数是socked,是套接字标识符

第二个参数是blog,是已完成链接和未完成链接的之和,通常设置为5

返回值:

成功返回0,失败返回-1

accept()函数:

将一个已完成链接的套接字从队列中取出来,返回下一个已完成连接

int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen)

参数:第一个是监听套接字

第二个及第三个参数是对端客户端的协议地址及其长度的指针



0 0
原创粉丝点击