您现在的位置是:首页 > 技术文章网站首页技术文章

TCP网络编程流程

  • WangYe
  • 2020-07-23 16:11:46
  • 653 次阅读
TCP网络编程结构介绍

服务端:

  1. 创建套接字 socket(); 

  2. 绑定套接字 bind(); 

  3. 监听套接字 listen();

  4. 监听套接字请求 accept(); 

  5. 读取数据 read(); 

  6. 写入数据 write();

  7. 关闭套接字 close();


客户端:

  1. 创建套接字 socket();

  2. 连接目标服务器 connect();

  3. 写入数据 write();

  4. 读取数据 read();

  5. 关闭套接字 close();


函数说明:

Socket();

#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain , int type , int protocol);

参数:
domain(设置网络通信域 PF_UNIX,PF_LOCAL[本地通信];PF_INET[IPV4协议];PF_INET6[IPV6协议];
一般选用PF_INET);

type(设置套接字通信类型 SOCK_STREAM[TCP连接,提供序列化,可靠,双向连接字节流.支持带外数据传输];
SOCK_DGRAM[支持UDP连接,无连接状态]);

protocol(用于指定某个协议的特定类型,即type数据中的某个类型.通常设置为 NULL或0);

Bind();

#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd ,const struct sockaddr *my_addr , socklen_t addrlen);

参数:
sockfd(socket()函数的文件描述符);
my_addr(指向sockaddr参数指针.包含地址 端口 IP);
addrlen(my_addr结构的长度,可以设置为sizeof(struct sockaddr));

bind()函数的返回值为0表示成功,-1表示绑定失败。

Listen();

#include <sys/socket.h>
int listen(int sockfd , int backlog);

参数:
sockfd(socket函数的文件描述符);
backlog(等待队列的长度);

Accept();

#include <sys/types.h>
#include <sys/socket.h>
int accept(int sockfd , struct sockaddr *addr , socklen_t *addrlen);

参数:
sockfd(socket文件描述符);
addr(用于存储获取客户端返回的数据);
addrlen(addr获取的参数长度,可以使用 sizeof(struct sockaddr_in));

Connect();

#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd , struct sockaddr *serv_addr , int addrlen);

参数:
sockfd(建立套接字时返回的套接字文件描述符);

serv_addr(指向数据结构sockaddr的指针,包含 端口 IP 协议类型);

addrlen(表示第二个参数的内容大小,可以使用sizeof(struct sockaddr)获取,与bind不同,
这个参数是一个整型变量而不是指针);

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

Write();

int size;
char data[1024];
size = write(s , data , 1024);

参数:
将缓冲区data的数据写入套接字文件描述符 s 中,返回值为成功写入的数据长度;

Read();

int size;
char data[1024];
size = read(s , data , 1024);

参数:
从套接字描述符s中读取1024字节,放入缓冲区data中,size变量的值为成功读取的数据大小;

Close();/Shutdown();

close();    //关闭已经打开的socket连接并释放内核相关资源;

#include int shutdown(int s , int how);

参数:
s(切断通信的套接字口文件描述符);
how(表示切断方式 SHUT_RD:值为0表示切断读;SHUT_WR:值为1表示切断写;SHUT_RDWR:值为2表示切断读写);

文章评论 (0)



Top