前言

说明:

  • demo 基于 Linux。

1. 快速入门

以下步骤简略了很多细节,但是通过下面的几个函数就能构建出简单的TCP/IP网络编程demo了。

原文:李柱明博客

1.1 服务端编程简要步骤

网络编程中和接受连接请求的套接字创建过程可整理如下:

  1. 第一步:调用 socket 函数创建套接字。
  2. 第二步:调用 bind 函数分配IP地址和端口号。
  3. 第三步:调用 listen 函数转换为可接受请求状态。
  4. 第四步:调用 accept 函数受理套接字请求。
  5. 第五步:调用 read、write 读写函数进行数据交互。
  6. 第六步:调用 close 函数关闭套接字。

1.2 客户端编程简要步骤

客户端请求连接简要步骤:

  1. 第一步:调用 socket 函数创建套接字。
  2. 第二步:调用 connect 函数向服务端发送连接请求。
  3. 第三步:调用 read、write 读写函数进行数据交互。
  4. 第四步:调用 close 函数关闭套接字。

1.3 参考

如 TCP 客户端和服务端:

部分参考函数及其头文件(基于linux):

  1. // 第一步:调用 socket 函数创建套接字。
  2. //成功时返回文件描述符,失败时返回-1
  3. #include <sys/socket.h>
  4. int socket(int domain, int type, int protocol);
  5. // 第二步:调用 bind 函数分配IP地址和端口号。
  6. //成功时返回0,失败时返回-1
  7. #include <sys/socket.h>
  8. int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
  9. /* 补充 client 部分 */
  10. //成功时返回0,失败时返回-1
  11. int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  12. // 第三步:调用 listen 函数转换为可接受请求状态。
  13. //成功时返回0,失败时返回-1
  14. #include <sys/socket.h>
  15. int listen(int sockfd, int backlog);
  16. // 第四步:调用 accept 函数受理套接字请求。
  17. //成功时返回文件描述符,失败时返回-1
  18. #include <sys/socket.h>
  19. int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
  20. // 第五步:调用读写函数进行数据交互。
  21. /* 成功时返回接收的字节数(但遇到文件结尾则返回 0),失败时返回 -1
  22. fd : 显示数据接收对象的文件描述符
  23. buf : 要保存接收的数据的缓冲地址值。
  24. nbytes : 要接收数据的最大字节数
  25. */
  26. #include <unistd.h>
  27. ssize_t read(int fd, void *buf, size_t nbytes);
  28. /* 成功时返回写入的字节数 ,失败时返回 -1
  29. fd : 显示数据传输对象的文件描述符
  30. buf : 保存要传输数据的缓冲值地址
  31. nbytes : 要传输数据的字节数
  32. */
  33. #include <unistd.h>
  34. ssize_t write(int fd, const void *buf, size_t nbytes);
  35. // 第六步:调用 close 函数关闭套接字。
  36. /* 成功时返回 0 ,失败时返回 -1
  37. fd : 需要关闭的文件或套接字的文件描述符
  38. */
  39. #include <unistd.h>
  40. int close(int fd);

参考:

【网络编程】TCPIP_1_快速入门的更多相关文章

  1. 网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议

    1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...

  2. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

    1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...

  3. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  4. 网络编程懒人入门(六):深入浅出,全面理解HTTP协议

    本文引用了自简书作者“涤生_Woo”的文章,内容有删减,感谢原作者的分享. 1.前言 HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广 ...

  5. Scala并发编程【快速入门】

    1.简介 Scala的actor提供了一种基于事件的轻量级线程.只要使用scala.actors.Actor伴生对象的actor()方法,就可以创建一个actor.它接受一个函数值/闭包做参数,一创建 ...

  6. CUDA编程之快速入门

    CUDA(Compute Unified Device Architecture)的中文全称为计算统一设备架构.做图像视觉领域的同学多多少少都会接触到CUDA,毕竟要做性能速度优化,CUDA是个很重要 ...

  7. CUDA编程之快速入门【转】

    https://www.cnblogs.com/skyfsm/p/9673960.html CUDA(Compute Unified Device Architecture)的中文全称为计算统一设备架 ...

  8. c++ 网络编程课设入门超详细教程 ---目录

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9663167.html c++ 网络编程(一)TCP/UDP windows/linux 下入门 ...

  9. 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...

随机推荐

  1. 寻找无序数组中的前k大元素

    题目描述 以尽可能小的代价返回某无序系列中的两个最大值,当有重复的时设置某种机制进行选择. 题解 首先要考虑的是重复的数的问题. A.不处理重复数据方法:在处理第k大的元素时不处理重复的数据,也就是将 ...

  2. NodeJS 进程是如何退出的

    有几种因素可以导致 NodeJS 进程退出.在这些因素中,有些是可预防的,比如代码抛出了一个异常:有些是不可预防的,比如内存耗尽.process 这个全局变量是一个 Event Emitter 实例, ...

  3. sort,wc,uniq 排序与统计命令

    sort命令 语法:sort [parameter] [file or stdin]参数: -f:忽略大小写的差异,例如A和a视为编码相同 -b:忽略最前面的空格符部分 -n:使用"纯数字& ...

  4. 《快来为你的 .NET 应用加个监控吧!》更新版本啦

    目录 导读 三种方式处理监控数据 主动推送 ASP.NET Core 自定义URL .NET diagnostics 自定义监控指标 导读 CZGL.ProcessMetrics 是一个 Metric ...

  5. Java笔记——方法

    ​  1.方法 (1)概念:①解决事情的办法②实现功能的代码段. (2)优点:①提到代码的复用性②便于后期维护.    (3)特点:①不调用不执行②方法不能嵌套,定义在类中方法外的位置. (4)定义方 ...

  6. Django基础005-Django开发的整体过程

    1.写views views.py代码块 1.在前端以/article/{{ article.id }}这种方式请求后台, 参数配置在urls.py中path('category/<int:id ...

  7. python pandas 读excel类

    import pandas as pd '''特例说明 file1="a20201220.xlsx" sheetname='Sheet1' df=pd.read_excel(fil ...

  8. java网络编程基础——TCP网络编程二

    1.半关闭的Socket 前面的服务器和客户端通信时总是以行为最小数据单位,但是在某些协议里,通信的数据单位可能是多行的,当出现多行数据时就 出现一个问题:Socket输出流如何表示输出数据已经结束. ...

  9. Leetcode:面试题28. 对称的二叉树

    Leetcode:面试题28. 对称的二叉树 Leetcode:面试题28. 对称的二叉树 Talk is cheap . Show me the code . /** * Definition fo ...

  10. Debian9 无线网卡驱动安装

    https://wiki.debian.org/iwlwifi sudo vi /etc/apt/sources.list --------- ..... deb http://httpredir.d ...