开发者社区> master_haku> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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地址,以及协议类型。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
海思3559万能平台搭建:TCP客户端网口编程
海思3559万能平台搭建:TCP客户端网口编程
0 0
TCP编程中的客户端与服务端的通信实现
TCP编程中的客户端与服务端的通信实现
0 0
Linux网络原理及编程(6)——第十六节 TCP可靠性保证的原理
你在应用层上想要发送一个信息,但是我在底层可能是通过发送多次、甚至有触发了超时重传等等。而站在用户的角度呢,你不用去管它,我传输层不管怎么发,反正最终把你的数据发出去就可以了。也就是说,应用层的传输和底层传输层的并不是一对一、一一对应的关系。
0 0
Linux网络原理及编程(5)——第十五节 TCP的连接(三次握手、四次挥手)
本节我们来介绍TCP连接的建立和断开。我们主要介绍两个过程、两个状态。
0 0
网络编程:socket—基于 TCP 协议编程|学习笔记
快速学习网络编程:socket—基于 TCP 协议编程
0 0
TCP 编程快速入门案例分析 | 学习笔记
快速学习 TCP 编程快速入门案例分析
0 0
TCP 编程-服务器监听 | 学习笔记
快速学习 TCP 编程-服务器监听
0 0
C#编程-60:简单的TCP通讯实例
C#编程-60:简单的TCP通讯实例
0 0
【从零开始的嵌入式生活】网络编程2——TCP编程
【从零开始的嵌入式生活】网络编程2——TCP编程
0 0
+关注
master_haku
Master HaKu
文章
问答
文章排行榜
最热
最新
相关电子书
更多
TCP Cluster for mqtt技术实施方案
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载