socket编程 套接字编程 (纯理论,以后补一下实现代码)

简介: 基本概念 套接字——应用层和传输层之间,提供应用传输接口Web/RPC/中间件——应用层之上的网络开发应用编程接口API(application programming interface)套接字接口(socket interface)简称套接字,是一种API。

基本概念

 

套接字——应用层和传输层之间,提供应用传输接口

Web/RPC/中间件——应用层之上的网络开发

应用编程接口API(application programming interface)

套接字接口(socket interface)简称套接字,是一种API。

 

socket API

一个进程可能会创建多个套接字,不同的进程会创建自己的套接字。

当客户端创建套接字希望与服务端进行通信时,通过端口号来分辨与服务端的哪一个应用进程进行通信(为什么不通过IP地址进行分辨,因为服务端主机上有多个应用进程在运行,每个应用进程可能会使用多个套接字。单单通过IP地址不足以分辨出是与哪一个套接字进行通信)

 

套接字对内对外使用的管理机制不同

标识通信端点(对外)——IP地址+端口号——这是针对TCP/IP的

操作系统/进程如何管理套接字(对内)——套接字描述符(socket  description)

一个进程创建一个套接字的时候,会返回一个套接字描述符。操作系统在管理内部套接字的时候,都是通过套接字描述符来引用的(操作系统使用套接字描述符来管理套接字的时候, 就是一种套接字抽象机制,这种抽象机制类似于文件的抽象。Unix操作系统对于套接字管理和文件管理,是一个管理,也就是说他把套接字看成是一个特殊的文件;Windows操作系统是分开管理的。)。

 

 

socket API函数

1、socket函数——创建套接字

调用socket函数成功之后,会返回一个套接字描述符(sd)

socket函数的三个参数:

1)、Protofamily)(协议族)——用于说明我的套接字面向哪种协议

2)、tyep(套接字类型)

3)、proto(协议号)

值为0代表用的是默认协议

例子——创建流套接字代码段

 

2、closesocket函数——关闭连接(Unix中的函数名是close,没有socket,记住)

 

3、bind函数——为套接字设置本地端点地址信息(即IP地址+端口号)

熟知端口号——web服务器就是80,sftp是25,以此类推

客户端一般不必调用bind函数

如果服务器有多个网卡,也就是有多个IP地址,该如何处理,绑定哪一个IP地址呢——使用地址IP体制通配符 INADDR_ANY

 

4、listen函数——服务端监听状态

 

5、connect函数——客户端

 

6、accept函数

当服务器调用accept,取走客户端的连接请求之后,就会创建新的套接字。真正与客户端创建连接的,就是这个新套接字。

 

7、send,sendto函数——用于发送数据

 

8、recv、recvfrom函数——用于接受数据

 

9、setsockopt、getsockopt——套接字参数设置和套接字参数读取

 

 

套接字面向TCP/IP可以创建的服务类型

应用层要通信,就要创建套接字。套接字假期了应用层和传输层的一个接口。

如果我创建的套接字的面向TCP的,就是流式套接字;如果是面向UDP而创建的套接字,就是数据报套接字;如果是直接面向网络层的套接字,则是原始套接字

 

 

网络应用中Socket API(TCP)调用的基本流程

 

 

客户端软件的设计

1、解析各个功能函数

    

    

 

2、TCP客户端软件流程

   

 

3、UDP客户端软件流程

    

 

 

 

 

 

 

 

 

相关文章
|
8天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
8天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
12天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
网络协议 安全 API
计算机网络之Socket编程
计算机网络之Socket编程
|
2月前
|
网络协议 安全 开发者
Python 中的 Socket 编程
Python 中的 Socket 编程
42 4
|
3月前
socket编程之回声服务器函数的陷阱
由connect函数使用不当导致的小错误 话不多说先看代码:
25 0
|
3月前
|
C语言
socket编程之回声服务器
回声服务器的实现 结合我们之前对socket函数的分析,现在做一个最简单的回声服务器(由客户端输入一串字符,再由服务器端转换成大写字符回显给客户端)
26 0
|
3月前
|
API C++
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(1)
前言   本文旨在学习socket网络编程这一块的内容,epoll是重中之重,后续文章写reactor模型是建立在epoll之上的。
34 0
|
3月前
|
监控 安全 Linux
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(3)
高并发服务器模型-poll poll介绍   poll跟select类似, 监控多路IO, 但poll不能跨平台。其实poll就是把select三个文件描述符集合变成一个集合了。
35 0
|
23天前
|
网络协议 Perl
Perl 教程 之 Perl Socket 编程 6
Perl Socket教程展示了如何进行网络通信。服务端(server.pl)创建一个TCP套接字,绑定到端口7890并监听,接收客户端连接并发送消息。客户端(client.pl)连接到服务端,接收并打印消息。在两个不同终端上分别运行服务端和客户端可实现交互。
24 2