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介绍的更多相关文章

  1. 网络编程-Socket介绍

    Socket介绍 什么是socket?(5分钟) Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议 ...

  2. Socket介绍

    一 socket协议 Socket协议的形象描述 socket的英文原义是“孔”或“插座”.在这里作为4BDS UNIX的进程通信机制,取后一种意思.socket非常类似于电话插座.以一个国家级电话网 ...

  3. tcp协议以及socket介绍

    壹:tcp协议:可靠传输 一: 3次握手,建立链接:4次挥手,断开链接 3次握手,建立链接:图解 ,这样双向通路就建立完成了. 在建立链接时,并没有数据传输,所以中间两部可以合在一起,也就是3次握手, ...

  4. socket介绍(webService适用场景)

    1.使用场景         - 不同的移动客户端访问      - 需要访问第三方的项目 2.访问第三方应用的方式      ISO的七层模型  : 物理层.数据链路层.网络层.传输层.表示层.会话 ...

  5. Linux入门培训教程 linux网络编程socket介绍

    一.概念介绍 网络程序分为服务端程序和客户端程序.服务端即提供服务的一方,客户端为请求服务的一方.但实际情况是有些程序的客户端.服务器端角色不是这么明显,即互为Linux培训 客户端和服务端. 我们编 ...

  6. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  7. java:Socket介绍(一)

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单 ...

  8. 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服务器传输超文 ...

  9. Socket介绍(五)

    套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接 ...

  10. OVERLAPPED相关的socket函数介绍

    OVERLAPPED相关的socket函数介绍 上一篇文章介绍了<Windows核心编程>OVERLAPPED结构与内核对象IOCompletionPort相关概念,见http://www ...

随机推荐

  1. C# 生成随机数重复问题

    今天做测试,在一个循环里面给实体属性赋随机值,然后生成一个实体集合,突然发现生成的实体集合中的所有实体相应属性值都是一样的,调试时却又发现值并不是重复的,度娘以后发现了问题——Random类是一个产生 ...

  2. win10与子系统ubuntu之间互访文件

    在window10的store里面 搜索ubuntu,下载,可以安装 注意: 初次打开有许多软件都没安装,可以新进行 sudo apt-get update,之后在进行其他的操作 1.下载的子系统ub ...

  3. Win7 自带FTP将文件复制到FTP服务器时发生错误。

    错误截图: 错误信息: 将文件复制到FTP服务器时发生错误.请检查是否有权限将文件放到该服务器上. 详细信息: 200 Type set to I. 200 PORT commad successfu ...

  4. day4-基础 字符串操作,文件操作,字符转编码

    1.字符串用法 name = 'daniel' print(name.capitalize()) #首字母大写 >>>daniel print(name.count('a')) #统 ...

  5. February 28 2017 Week 9 Tuesday

    Time you enjoy wasting, was not wasted. 你乐于挥霍的时间,都不能算作是浪费. A few days ago, I learned a sentence from ...

  6. Docker镜像提交命令commit的工作原理和使用方法

    在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 下面我们来动手实践. docker pull nginx:1.15.3 用命令行 ...

  7. 【转】 ios的手势操作之UIGestureRecognizer浅析

    一.概述 iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式: - (void)touchesBegan:(NSSet *)touches withE ...

  8. [ZJOI2012]小蓝的好友

    https://www.luogu.org/problemnew/show/P2611 题解 \(n\times m\)肯定过不去.. 我们把给定的点看做障碍点,考虑先补集转化为求全空矩阵. 然后我们 ...

  9. Vue.js系列之vue-resource(6)

    网址:http://blog.csdn.net/u013778905/article/details/54235906

  10. 访问google的若干解决办法

    据悉,海外谷歌持续被屏蔽,所有海外服务均无法访问,也无法使用google搜索,之前DNS域名污染系统攻击造成google本身故障的假象,但是现在,谷歌服务器IP的屏蔽以及443端口的屏蔽,大陆用户将无 ...