TCP/IP编程 - 1) 基础知识

简介: 1. What Is a Socket?(什么是套接字)   A socket is an abstraction through which an application may send and receive data, in muchthe same way as an open-file handle allows an application to read and write data to stablestorage.   简单来说,套接字就是网络数据传输用的软件设备。

1. What Is a Socket?(什么是套接字)

 

A socket is an abstraction through which an application may send and receive data, in much
the same way as an open-file handle allows an application to read and write data to stable
storage.

 

简单来说,套接字就是网络数据传输用的软件设备。

 

举个生活中的例子:

我们把插头插到插座上就能从电网获得电力供应,同样道理,为了与远程计算机

进行数据通信,需要连接到Internet,而套接字就是用来连接网络的工具。

 

A socket allows an application to plug in to the network and communicate with other
applications that are plugged in to the same network. Information written to the socket by
an application on one machine can be read by an application on a different machine and vice
versa.

 

TCPIP套接字网络原理图:

 

2. 套接字网络编程的步骤

 

a. 服务端

step1: 调用socket函数创建套接字

step2: 调用bind函数分配IP地址和端口号

step3: 调用listen函数转为可接收请求状态

step4: 调用accept函数受理连接请求

 

b. 客户端

step1: 调用socket函数创建套接字

step2: 调用connect函数向服务端发送连接请求

 

3. 各函数介绍

 

1) socket()函数

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


这个函数建立一个协议族为domain,协议类型为type,协议编号为protocol的

套接字文件描述符。

domain: 协议族, 通常为AF_NET(TCPIP协议族), 以太网使用PF_INET

type: 通信类型

    SOCK_STREAM(流式套接字)

    SOCK_DGRAM(数据包套接字)

protocol: 协议的特定类型,通常为0

 

2) bind()函数

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

这个函数将长度为addrlen的sockaddr结构类型参数my_addr和sockfd绑定在一起

 

3. listen()函数

这个函数用来监听端口

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


 

4. accept()函数

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

通过accept()函数可以得到成功连接客户端的IP地址,端口和协议族等信息,这个信息是通过

参数addr获得的。

 

5. connect()函数 - 客户端

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

这个函数用来连接网络目标服务器。
其中,参数ser_addr结构包含了需要连接的目的服务器的端口和IP地址,以及协议类型。

 

目录
相关文章
|
网络协议
TCP/IP协议的介绍
TCP/IP协议是众多协议的统称,通过分层结构来管理。可分为七层模型或四层结构
|
网络协议 网络架构
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
|
网络协议
海思3559万能平台搭建:TCP客户端网口编程
海思3559万能平台搭建:TCP客户端网口编程
118 0
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
211 0
IP协议, TCP协议 和DNS 服务分别是干什么的?
|
网络协议
TCP/IP协议族有哪些?
大家好,我是阿萨。昨天我们学习了[URI 和URL 的区别是什么?]了解了URI 和URL的区别。 学习HTTP, 绕不开TCP/IP,那么TCP/IP 协议族分为哪4层?
254 0
TCP/IP协议族有哪些?
|
网络协议 网络性能优化 网络安全
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)
|
域名解析 网络协议 安全
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(1)
|
网络协议 算法 网络性能优化
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
网络入门基础模型, 网络大体框架, TCP/IP协议栈, 各种局域网和广域网刨析 (以图解的方式推开网络大门)
|
存储 运维 网络协议
深入浅出:这次终于能把 TCP/IP 协议搞明白了
深入浅出:这次终于能把 TCP/IP 协议搞明白了
深入浅出:这次终于能把 TCP/IP 协议搞明白了
|
网络协议 NoSQL 数据库连接
【七日打卡】TCP&IP在开发中的作用
在网络应用开发中, 程序之间的交互都是通过TCP连接来进行通信的, 比如数据库连接, 事务连接管理。
【七日打卡】TCP&IP在开发中的作用