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)相关推荐

  1. Linux下简单socket编程

    Linux下简单socket编程 socket的英文翻译是接口.插座的意思,很形象,就相当于将两个台电脑用一根线连起来,线的两头分别是插头,插在两台电脑上,借此实现通信. 两台电脑通信,实际上是这两台 ...

  2. Linux下高级C编程(学习总结)

    Linux下高级C编程 第一章 unix/linux系统的基本概念 第二章 unix/linux系统下的编程基础和开发方式 第三章 unix/linux系统下的内存管理 第四章 unix/linux系 ...

  3. linux下的socket编程

    1.socket的通信流程 这是socket的通信流程图. 在linux系统中,一切皆文件,socket也被看作是文件. 所以socket的通信可以看作是往socket文件中写入数据和读取数据的过程. ...

  4. Linux下网络socket编程——实现服务器(select)与多个客户端通信

    一.关于socket通信 服务器端工作流程: 调用 socket() 函数创建套接字 用 bind() 函数将创建的套接字与服务端IP地址绑定 调用listen()函数监听socket() 函数创建的 ...

  5. C++ 网络编程下的socket编程(TCP\UDP),连接下位机

    正常情况下我们需要对下位机进行通信需要使用Socket进行连接操作,而在网络编程中又分为面向连接(TCP)和面向无连接(UDP)这两种,针对这两种方式,我们不做具体的原理解释,只说各自的特点和各自的应 ...

  6. windows环境下的socket编程(tcp文件传输的实现)

    开发环境 使用codeclock软件进行编程 新建项目选择console application完成相应的步骤即可.在项目下有main.c的文件只需要将代码写入其中即可. 代码设计 客户端 clien ...

  7. Linux下C++ Socket编程实例

    参考文章: https://www.cnblogs.com/wuyepeng/p/9737583.html

  8. linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程

    linux下用C语言实现TCP/IP服务器与客户端互相发送数据的socket编程 server.c #include <sys/stat.h>#include <fcntl.h> ...

  9. Linux下的C编程实战

    Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...

最新文章

  1. linux 下的 initrd ramdisk
  2. 三维点云学习(4)5-DBSCNA python 复现-3-kd-tree radius NN 三方库 scipy 与 sklearn速度比较
  3. 简单5步,释放Mac磁盘空间
  4. 「陶哲軒實分析」 習題 3.4.4
  5. 数据结构与算法——左程云07
  6. LaTeX 排版(三)——排版样式设定
  7. AWB(Attention WaveBlock)
  8. Android通知栏—Notification(一)
  9. 阿里云MVP北京闭门会圆满落幕 多把“利剑”助力开发者破阵蜕变...
  10. Javascript-API-BOM、动画函数、网页轮播图、节流阀、筋斗云、固定侧边栏返回顶部案例
  11. spark输出rdd数据_Spark中RDD的详解
  12. Unity—手机端的触屏控制
  13. 计算机与生物教学思路和方法,信息技术与生物教学相互融合
  14. 电商项目相关面试问题及答案
  15. input框不可编辑的三种方法
  16. 小森生活服务器维护到几点,小森生活几点开服上线 2021小森生活开服表大全[多图]...
  17. JAVA遍历数组中的元素
  18. 珠峰java_珠峰架构师培养计划2021
  19. 手把手教你搭建springCloud--注册中心使用eureka
  20. citus 之二 distributed table

热门文章

  1. android byte[] 清空,android byte的使用
  2. python扫雷布雷小程序
  3. 软件工程-可行性研究
  4. 记一次app上架苹果应用商店
  5. 写给我们这些20来岁的人
  6. 数字孪生城市项目的关键技术展望
  7. 防爆等级介绍 - IP65防爆等级和dIIBT4防爆等级的有什么区别?
  8. (BAT批处理)如何穿透多个文件夹批量修改文件后缀名?
  9. 基于FPGA的数字示波器的触发/采集
  10. Fedora 阿里云源