Socket究竟是什么呢?
简单来说Socket就是用来完成客户端与服务器之间的通信
例如浏览器访问网页,例如网络游戏等一切基于客户端服务器来实现的C/S架构程序
Socket是基于互联网OSI七层协议的一个结构,准确的说是基于建议互联网模型OSI五层协议的接口
如图所示,自行脑补!
此处延伸一个概念:套接字
套接字在最开始的时候,是应用于进程与进程之间的通信,之后被广泛应用到互联网,基本上分为两个种族
基于文件类型的套接字:AF_UNIX
基于网络类型的套接字:AF_INET
而我们今后关心的重点肯定是网络类型,所以今后我们会对AF_INET分解研究
套接字的工作流程:
这里我们可以看出来socket的基本工作流程了,也大致看了一下socket通信时所用到的方法
服务端套接字函数
服务端套接字函数
s.bind() 绑定(主机,端口号)到套接字
s.listen() 开始TCP监听
s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来 客户端套接字函数
s.connect() 主动初始化TCP服务器连接
s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常 公共用途的套接字函数
s.recv() 接收TCP数据
s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
s.recvfrom() 接收UDP数据
s.sendto() 发送UDP数据
s.getpeername() 连接到当前套接字的远端的地址
s.getsockname() 当前套接字的地址
s.getsockopt() 返回指定套接字的参数
s.setsockopt() 设置指定套接字的参数
s.close() 关闭套接字 面向锁的套接字方法
s.setblocking() 设置套接字的阻塞与非阻塞模式
s.settimeout() 设置阻塞套接字操作的超时时间
s.gettimeout() 得到阻塞套接字操作的超时时间 面向文件的套接字的函数
s.fileno() 套接字的文件描述符
s.makefile() 创建一个与该套接字相关的文件
以上供了解和学习
那么如何使用socket进行TCP通信呢?
代码示例:
# 编辑者:闫龙
import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(("192.168.16.2",8800))
phone.listen(5)
while True:
con,addr = phone.accept()
while True:
try:
datas = con.recv(1024)
if not datas : break # 应对服务死循环
if(datas == b"egon"):
con.send(b"sb")
else:
con.send(datas)
except Exception as e:
break
con.close()
phone.close()
服务器端
# 编辑者:闫龙
import socket
GoPhone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
GoPhone.connect(("192.168.16.2",8800))
while True:
msg= input(">>>:")
if not msg : continue
GoPhone.send(msg.encode("utf8"))
print(GoPhone.recv(1024).decode("gbk"))
客户端
今天暂时写到这里,明天继续
python概念-Socket到底有多骚的更多相关文章
-
「Python」socket指南
开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...
-
Python底层socket库
Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...
-
转:Python 的 Socket 编程教程
这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs. ...
-
Python 之socket的应用
本节主要讲解socket编程的有关知识点,顺便也会讲解一些其它的关联性知识: 一.概述(socket.socketserver): python对于socket编程,提供了两个模块,分别是socket ...
-
老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具
老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...
-
python之socket编程(一)
socket之前我们先来熟悉回忆几个知识点. OSI七层模型 OSI(Open System Interconnection)参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标 ...
-
进击的Python【第十章】:Python的socket高级应用(多进程,协程与异步)
Python的socket高级应用(多进程,协程与异步)
-
Python Udp Socket
socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...
-
Python Tcp Socket
socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...
随机推荐
-
gulp删除文件和文件夹
使用模块:del,npm install --save-dev gulp del var gulp = require('gulp'); var del = require('del'); gulp. ...
-
第 13 章 剖析el表达式
13.1. 再谈el(Expression Language) 我们已经知道el是jsp-2.0规范的一部分,tomcat-5.x版本以上都已经能够支持jsp-2.0规范,但在更低版本的tomcat和 ...
-
Codeforces Round #239 (Div. 2) C. Triangle
time limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputoutput:standard o ...
-
【算法Everyday】第三日 KMP算法
题目 你知道的. 分析 分析不来. 代码 void OutputArray(int* pArr, int iLen) { ; i < iLen; i++) { printf("%d\t ...
-
unique &; lower_bound C++
原来C++也有unique和lower_bound,只需头文件iostream unique unique可以对数组进行相邻元素的"去重",实现效果是把所有不重复的元素按顺序放在数 ...
-
JDK记录-JVM原理与调优(转载)
转载自<https://www.cnblogs.com/andy-zhou/p/5327288.html> 一.什么是JVM JVM是Java Virtual Machine(Java虚拟 ...
-
vue中的双向绑定
概述 今天对双向绑定感兴趣了,于是去查了下相关文章,发现有用脏检查的(angular.js),有用发布者-订阅者模式的(JQuery),也有用Object.defineProperty的(vue),其 ...
-
day30 纸牌游戏
import json from collections import namedtuple Card = namedtuple('Card', ['rank', 'suit']) # rank 牌面 ...
-
switch case 变量初始化问题
今天再写alsa的时候遇到一个稀奇古怪的问题,网上看了下资料,摘出来入下 代码: int main() { ; switch(a) { : ; break; : break; default: bre ...
-
C#中public与private与static
现在静下心来想要重新细致的过一遍C#,因为自己做C#没有底气,, 闲话少说 先来一句话 public(共有的) 声明的方法和属性,可以被外部调用. private(私有的) 声明的方法和属性,只能在本 ...