Linux下的socket编程学习(TCP)
1.什么是socket?
socket的英文翻译就是接口,插座的意思,很形象,就相当于将2台电脑用一根线连起来,线的两头插在不同的电脑上,借此实现通讯的功能。
两台电脑通信,实际上是这两台电脑上的某个进程在进行通信。而两个进程进行通信,实际上是往同一个文件中读取数据。
2.TCP/IP(3次握手)
在tcp/ip协议中,tcp通过三次握手建立起一个tcp的链接,大致如下
第一次握手:客户端尝试连接服务器,向服务器发送syn包,syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
3.在Linux下进行socket程序编写
流程图如下:
服务端的socket编程
基础的步骤如下,基本都是使用一些API函数:
(1)创建socket;
(2)绑定地址和端口;
(3)启动监听;
(4)接受客户端的请求;
(5)读写数据;
下面介绍一下每一步所使用到的API函数
1.1创建socket
mysocket = socket(int socket_family, int socket_type, int protocol);
第一个参数为socket的协议族;一般使用AF_INET,表示使用IPV4协议。
第二个参数为socket的类型,主要分为SOCK_STREAM和SOCK_DGRAM,分别对应TCP协议和UDP协议。
第三个参数为socket使用的特定协议,一般对应一个协议族就只有一个协议,可以使用0表示使用默认的协议。
函数的返回值为创建的socket文件描述符。-1表示创建失败。
1.2绑定地址和端口:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
第一个参数为刚刚创建的socket;
第二个参数是一个结构体sockaddr的指针。但实际使用的时候,根据协议的不同,而使用不同的结构。对于TCP而言,使用sockaddr_in。
第三个参数是第二个参数结构体的长度。
1.3启动监听:
int listen(int sockfd, int backlog);
第一个参数为socket文件描述符;
第二个参数为同时连接数量;
1.4接收客户端请求:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
第一个参数socket文件描述符;
第二个参数为sockaddr结构体指针,用来接收客户端的地址信息。
第三个参数为第二个参数的长度。
返回值为对应的客户端socket的文件描述符,失败则返回-1。
1.5读写操作
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
tcpserver.c
客户端的socket编程
客户端的功能,就是连接到服务器,然后就可以进行通讯。所以主要的步骤就是填写服务器的地址并进行连接。
(1)创建socket;
(2)连接服务器;
(3)读/写数据;
2.1 连接服务器
创建socket与读/写数据,和服务端的一模一样,这里只讲一下连接这一步。
函数原型:
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
第一个参数为创建的socket文件描述符。
第二个参数为sockaddr结构体指针,服务器端的地址信息。
第三个参数为第二个参数的长度。
可以使用inet_addr将IP地址从字符串形式转换为二进制形式。
tcpclient.c文件
执行程序(先运行服务端,再运行客户端)
Linux下的socket编程学习(TCP)相关推荐
- Linux下简单socket编程
Linux下简单socket编程 socket的英文翻译是接口.插座的意思,很形象,就相当于将两个台电脑用一根线连起来,线的两头分别是插头,插在两台电脑上,借此实现通信. 两台电脑通信,实际上是这两台 ...
- Linux下高级C编程(学习总结)
Linux下高级C编程 第一章 unix/linux系统的基本概念 第二章 unix/linux系统下的编程基础和开发方式 第三章 unix/linux系统下的内存管理 第四章 unix/linux系 ...
- linux下的socket编程
1.socket的通信流程 这是socket的通信流程图. 在linux系统中,一切皆文件,socket也被看作是文件. 所以socket的通信可以看作是往socket文件中写入数据和读取数据的过程. ...
- Linux下网络socket编程——实现服务器(select)与多个客户端通信
一.关于socket通信 服务器端工作流程: 调用 socket() 函数创建套接字 用 bind() 函数将创建的套接字与服务端IP地址绑定 调用listen()函数监听socket() 函数创建的 ...
- C++ 网络编程下的socket编程(TCP\UDP),连接下位机
正常情况下我们需要对下位机进行通信需要使用Socket进行连接操作,而在网络编程中又分为面向连接(TCP)和面向无连接(UDP)这两种,针对这两种方式,我们不做具体的原理解释,只说各自的特点和各自的应 ...
- windows环境下的socket编程(tcp文件传输的实现)
开发环境 使用codeclock软件进行编程 新建项目选择console application完成相应的步骤即可.在项目下有main.c的文件只需要将代码写入其中即可. 代码设计 客户端 clien ...
- Linux下C++ Socket编程实例
参考文章: https://www.cnblogs.com/wuyepeng/p/9737583.html
- linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程
linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程 server.c #include <sys/stat.h>#include <fcntl.h> ...
- Linux下的C编程实战
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...
最新文章
- linux 下的 initrd ramdisk
- 三维点云学习(4)5-DBSCNA python 复现-3-kd-tree radius NN 三方库 scipy 与 sklearn速度比较
- 简单5步,释放Mac磁盘空间
- 「陶哲軒實分析」 習題 3.4.4
- 数据结构与算法——左程云07
- LaTeX 排版(三)——排版样式设定
- AWB(Attention WaveBlock)
- Android通知栏—Notification(一)
- 阿里云MVP北京闭门会圆满落幕 多把“利剑”助力开发者破阵蜕变...
- Javascript-API-BOM、动画函数、网页轮播图、节流阀、筋斗云、固定侧边栏返回顶部案例
- spark输出rdd数据_Spark中RDD的详解
- Unity—手机端的触屏控制
- 计算机与生物教学思路和方法,信息技术与生物教学相互融合
- 电商项目相关面试问题及答案
- input框不可编辑的三种方法
- 小森生活服务器维护到几点,小森生活几点开服上线 2021小森生活开服表大全[多图]...
- JAVA遍历数组中的元素
- 珠峰java_珠峰架构师培养计划2021
- 手把手教你搭建springCloud--注册中心使用eureka
- citus 之二 distributed table