003---socket介绍
socket介绍
什么是socket?
socket是应用层与tcp/ip协议族通信的中间软件抽象层,它是一组接口。在设计模式中。其实就是一个门面模式。我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们遵循socket的规定去编程开发就行。
套接字分类
基于文件类型的套接字家族
名字:AF_UNIX
unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据。两个套接字进程运行在同一机器,可通过访问同一个文件系统间接完成通信。
基于文件类型的套接字家族
名字:AF_INET
python支持很多种地址家族,但是我们只关心网络编程,大部分只使用AF_INET。
套接字工作流程
当通过socket建立两台机器的连接后,本质上socket只做两件事,一是收数据、二是发数据,没数据就等着。

简单的套接字通信
服务端
import socket
# 创建服务器套接字对象
sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
# 绑定 ip 和 port
sk.bind(('127.0.0.1', 8080))
# 监听:最大挂起连接数
sk.listen(5)
# 等待连接
print('starting...')
# 客户端初始化一个socket,
conn, addr = sk.accept()
# 收消息
data = conn.recv(1024)
print('客户端发来的数据', data)
# 发消息
conn.send(data.upper())
# 关闭连接,客户端套接字
conn.close()
# 关闭服务端套接字对象
sk.close()
客户端
import socket
# 创建客服端套接字对象
sk = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
# 连接服务端
sk.connect(('127.0.0.1', 8080))
# 发消息
sk.send('hello python'.encode('utf-8'))
# 收消息
data = sk.recv(1024)
print(data)
# 关闭客服端套接字对象
sk.close()
socket对象的常用方法
服务端套接字函数
- service.bind():绑定(IP,PORT)到套接字
- service.listen():开始TCP监听
- service.accept():被动接受TCP客户的连接,阻塞式等待连接的到来
客户端套接字函数
- client.connect():主动连接服务器
- client.connect_ex():扩展版本,出错时返回出错码,而不是抛出异常
公共用途的套接字函数
- sk.recv():接收TCP数据
- sk.send():发送TCP数据(在待发送数据量大于缓存区剩余空间时,数据会丢失,不会发完)
- sk.sendall():发送完整的TCP数据(本质就是循环调用send。不会造成数据丢失,循环调用send直到发完)
- sk.recvfrom():接收UDP数据
- sk.sendto():发生UDP数据
- sk.close():关闭套接字
面向锁的套接字方法
- sk.setblocking():设置套接字的阻塞与非阻塞模式
- sk.settimeout():设置阻塞套接字操作的超时时间
- sk.gettimeout():得到阻塞套接字操作的超时时间
003---socket介绍的更多相关文章
- 网络编程-Socket介绍
Socket介绍 什么是socket?(5分钟) Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议 ...
- Socket介绍
一 socket协议 Socket协议的形象描述 socket的英文原义是“孔”或“插座”.在这里作为4BDS UNIX的进程通信机制,取后一种意思.socket非常类似于电话插座.以一个国家级电话网 ...
- tcp协议以及socket介绍
壹:tcp协议:可靠传输 一: 3次握手,建立链接:4次挥手,断开链接 3次握手,建立链接:图解 ,这样双向通路就建立完成了. 在建立链接时,并没有数据传输,所以中间两部可以合在一起,也就是3次握手, ...
- socket介绍(webService适用场景)
1.使用场景 - 不同的移动客户端访问 - 需要访问第三方的项目 2.访问第三方应用的方式 ISO的七层模型 : 物理层.数据链路层.网络层.传输层.表示层.会话 ...
- Linux入门培训教程 linux网络编程socket介绍
一.概念介绍 网络程序分为服务端程序和客户端程序.服务端即提供服务的一方,客户端为请求服务的一方.但实际情况是有些程序的客户端.服务器端角色不是这么明显,即互为Linux培训 客户端和服务端. 我们编 ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
- java:Socket介绍(一)
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单 ...
- C# HTTP1.0 1.1 2.0与HTTPS 、TCP/IP协议的UDP与TCP、 Socket介绍与WebSocket
一.HTTP1.0 1.1 2.0和HTTPS 1.HTTP协议是什么? HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol.它是从WEB服务器传输超文 ...
- Socket介绍(五)
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接 ...
- OVERLAPPED相关的socket函数介绍
OVERLAPPED相关的socket函数介绍 上一篇文章介绍了<Windows核心编程>OVERLAPPED结构与内核对象IOCompletionPort相关概念,见http://www ...
随机推荐
- Struts2的学习-通配符和session对象
一. 取得session 3种方法1.context.getSession() -->>Map对象 2.HttpServletRequest request =(HttpServletRe ...
- day3-基础 列表,元组,字典,模块
1.列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 Country = ['China','England','America'] 通过下标访问列 ...
- 解决TextBox Ctrl+A不能全选的问题
// 添加keyPress事件 private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar = ...
- mac 上安装lua
mac 安装lua google了好个看起来都不怎么好操作,这个是在命令行下操作的很简单. http://www.lua.org/download.html curl -R -O http://www ...
- 在vue项目中的axios使用配置记录
默认vue项目中已经安装axios,基于element-ui开发,主要记录配置的相关. axiosConfig.js import Vue from 'vue' import axios from ' ...
- 八、IntelliJ IDEA 缓存和索引的介绍及清理方法
这样一句话“ 对于首次创建或打开的新项目,IntelliJ IDEA 都会创建项目索引,大型项目在创建索引的过程中可能会出现卡顿的现象,因此强烈建议在 IntelliJ IDEA 创建索引的过程中不要 ...
- sql树形查询
sql: 使用Common As:递归公用表 https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expressi ...
- Go转json数组
Go转json数组 最近因需要要调用gitlab的API,其中有一个是根据私有token获取Repositories列表 由于返回结果是一个json数组,单纯使用json.Unmarshal没法实现, ...
- SpringBoot非官方教程 | 第十三篇:springboot集成spring cache
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot13-springcache/ 本文出自方志朋的博 ...
- VSS使用方法详解
Microsoft Visual SourceSafe是美国微软公司出品的版本控制系统,简称VSS.它提供了还原点和并行协作功能,从而使应用程序开发组织能够同时处理软件的多个版本.该版本控制系统引入了 ...