TCP/IP网络编程笔记-ch1.理解网络编程和套接字

2023-11-22 17:18

本文主要是介绍TCP/IP网络编程笔记-ch1.理解网络编程和套接字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 函数
    • 服务器
      • 创建套接字:
      • 为套接字分配地址:
      • 将套接字转化成可接受连接状态:
      • 接收连接:
      • 接收连接的套接字创建过程:
    • 客户端
      • 请求连接:
    • 文件操作
      • 打开文件
      • 关闭文件
      • 数据写入文件
  • 实例

函数

服务器

创建套接字:

#include<sys/socket.h>
int socket(int domain,int type,int protocol)
//成功返回文件描述符,失败返回-1

为套接字分配地址:

#include<sys/socket.h>
int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen);
//成功返回0,失败返回-1并设置errno常见的errno:EACCES:被绑定的地址是受保护的地址,仅超级用户能访问。比如普通用户将socket绑定到知名服务端口(端口号0~1023上)时,bind将返回EACCES错误。EADDRINUSE:被绑定地址正在使用。(如将socket绑定到一个处于TIME_WAIT状态的socket地址)

将套接字转化成可接受连接状态:

#include<sys/socket.h>
int listen(int sockfd,int backlog);
//成功返回0,失败返回-1并设置errnobacklog参数提示内核监听队列的最大长度,若监听队列长度超过backlog,服务器不再受理新的客户连接
,客户端也会收到ECONNREFUSE错误信息。内核2.2之前的Linux中,backlog指所有处于半连接状态(SYN_RCVD)和完全连接(ESTABLISHED)的socket的上限2.2之后,它只表示处于完全连接状态的socket的上限,处于半连接的socket的上限,处于半连接状态的socket的上限则由/proc/sys/net/ipv4/tcp_max_syn_backlog内核参数定义。backlog典型值为5.

在这里插入图片描述

半连接与全连接:
TCP全连接和半连接

接收连接:

#include<sys/socket.h>
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
//成功返回文件描述符,失败返回-1

接收连接的套接字创建过程:

socket创建套接字
bind分配IP地址和端口号
listen转为可接受请求状态
accept受理连接请求

客户端

请求连接:

#include<sys/socket.h>
int connect(int sockfd,struct sockaddr *serv_addr,socklen_t addrlen);
//成功返回0,失败返回-10

文件操作

打开文件

#include<sys/types.h>
#include<sys/stat.h>
#include<fcnt1.h>@param path:文件名字符串地址
@param flag:文件打开模式信息
int open(const char*path,int flag);
//成功返回文件描述符,失败返回-1

文件打开模式:

打开模式含义
O_CREAT必要时创建文件
O_TRUNC删除全部现有数据
O_APPEND维持现有数据,保存到其后面
O_RDONLY只读打开
O_WRONLY只写打开
O_RDWR读写打开

关闭文件

#include<unistd.h>int close(int fd);
//成功返回0,失败返回-1

数据写入文件

#include<unistd.h>@param fd:显示数据传输对象的文件描述符
@param buf:保存要传输数据的缓冲地址值
@param nbytes:要传输数据的字节数
ssize_t write(int fd,const void *buf,size_t nbytes);
//成功返回写入字节数,失败返回-1

实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cQORjkLL-1641630369443)(https://note.youdao.com/yws/res/8/WEBRESOURCEd3850f795cf1a57d05e5a2016e4da908)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5HTDAkhu-1641630369444)(https://note.youdao.com/yws/res/a/WEBRESOURCE55efd2a1b11b3ddbf2ed2a21ec75909a)]

这篇关于TCP/IP网络编程笔记-ch1.理解网络编程和套接字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/411682

相关文章

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不