socket套接字/TCP

一 客户端/服务器架构

C/S架构,包括

  1. 硬件C/S架构(打印机)
  2. 软件C/S 架构(web服务)
  3. C/S架构的软件(软件属于应用层)是基于网络进行通信的

Server端要:

1.力求一直提供服务,

2.要绑定一个唯一的地址,让客户端能够明确的找到

osi七层

互联网的核心:基于一堆互联网协议组成

Tcp+ip 找到全世界独一无二的软件

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

每层运行常见物理设备

详细参考:

http://www.cnblogs.com/linhaifeng/articles/5937962.html#_label4

socket

socket是什么

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

五 套接字发展史及分类

基于文件类型的套接字家族

套接字家族的名字:AF_UNIX

unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

基于网络类型的套接字家族

套接字家族的名字:AF_INET (地址家族,由于我们只关心网络编程,所以大部门我们只使用AF_INET)

六 套接字工作流程

服务器端:服务器端先初始化Socket,然后进行端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。

客户端:客户端初始化Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了,客户端发送数据请求,服务器接收请求并处理请求,然后把回应数据发送给客户端,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

Socket()模块函数用法

import socket
socket.socket(socket_family,socket_type,protocal=0)
socket_family(可以是AF_UNIX 或 AF_INET)
socket_type(可以是 SOCK_STREAM 或 SOCK_DGRAM)
protocal(一般不填,默认值为0)#获取tcp/ip套接字
tcpSock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#获取udp/ip套接字
udpSock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

  

服务端套接字函数

s.bind()  绑定(主机,端口号)到套接字

s.listen()  开始TCP监听

s.accept()  被动接受TCP客户的连接,(阻塞式)等待连接的到来

客户端套接字函数

s.connect() 主动舒适化TCP服务器连接

s.connect_ex()  connect()函数的扩展版本,出错时返回出错码,而不是抛出异常

公共用途的套接字函数

s.recv()  接收TCP数据

s.send()  发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)

s.close()  关闭套接字

socket通信流程与打电话流程类似:

#服务端
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #买手机
phone.bind(("127.0.0.1",8000))  #绑定手机卡
phone.listen(5)  #开机print("starting.....")
conn,addr=phone.accept()  #等待电话链接print('电话线路是',conn)
print("客户端的手机号是",addr)
while True:#通信循环data=conn.recv(1024) #收消息print("客户端发来的消息是",data)conn.send(data.upper())conn.close()phone.close()执行结果:
starting.....
电话线路是 <socket.socket fd=304, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 54668)>
客户端的手机号是 ('127.0.0.1', 54668)
客户端发来的消息是 b'bith'#客户端
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(("127.0.0.1",8000))while True:#通信循环msg=input(">>: ").strip()if not msg:continuephone.send(msg.encode("utf-8"))data=phone.recv(1024)print(data)phone.close()执行结果:
>>: bith
b'BITH'

修改版本

客户端终止,服务端程序不会中断

#服务端:
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #买手机
phone.bind(("127.0.0.1",8000))  #绑定手机卡
phone.listen(5)  #开机
print("starting.....")
while True: #链接循环conn,addr=phone.accept()  #等待电话链接print('电话线路是',conn)print("客户端的手机号是",addr)while True:#通信循环try: #应对Windows系统data=conn.recv(1024) #收消息print("客户端发来的消息是",data)conn.send(data.upper())except Exception:breakconn.close()phone.close()执行结果
starting.....
电话线路是 <socket.socket fd=304, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 55009)>
客户端的手机号是 ('127.0.0.1', 55009)
客户端发来的消息是 b's'
电话线路是 <socket.socket fd=304, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 55010)>
客户端的手机号是 ('127.0.0.1', 55010)#客户端
import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(("127.0.0.1",8000))while True:#通信循环msg=input(">>: ").strip()if not msg:continuephone.send(msg.encode("utf-8"))data=phone.recv(1024)print(data)phone.close()

  

转载于:https://www.cnblogs.com/niejinmei/p/6803105.html

python--socket套接字/TCP相关推荐

  1. socket套接字TCP API

    socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点,或称之为句柄.IP地址+端口号就可以唯一确定一个sock ...

  2. linux tcp连接计算机,计算机基础知识——linux socket套接字tcp连接分析

    2016.7.4 今天晚上对项目顶层文件(daemon)进行了分析,对其中的TCP连接进行具体的代码级分析. 1.需求分析 首先得知道我们这里为什么要用TCP连接,我们的整个测试系统是由上位机作为客户 ...

  3. Python Socket套接字编程

    网络模型的简介 网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息,资源包括高性能计算机. ...

  4. JavavEE中网络编程Socket套接字Ⅱ(TCP)

    文章目录 TCP流套接字 ServerSocket API Socket API

  5. java贪吃蛇客户端服务器_java Socket套接字TCP编程开发服务端和客户端之间的通信 - 贪吃蛇学院-专业IT技术平台...

    超级简单,没有太多实质内容的Socket服务端,客户端小程序 先运行server 再运行client OK 服务端代码如下: public class Server { public static v ...

  6. 自学Python 58 Socket套接字编程 (一)

    Python Socket套接字编程 (一) 文章目录 Python Socket套接字编程 (一) 一.库 Socket 内置函数和属性 二.Python中的socket通信逻辑   Socket又 ...

  7. JavavEE中网络编程Socket套接字Ⅰ(UDP)

    文章目录 Socket套接字 TCP和UDP的区别 UDP socket DatagramSocket DatagramPacket

  8. Python 技术篇-socket套接字实现两个窗口间消息传递实例演示,TCP实现

    上一篇:Python 技术篇-socket 套接字实现服务器客户端消息传递,UDP 实现 本篇介绍用 TCP 来实现. socket 实现客户端服务器的消息传递有 TCP 和 UDP 两种方式. TC ...

  9. Python网络编程——socket套接字实现UDP/TCP信息传输

    socket套接字 socket(简称 套接字) ,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来 ...

最新文章

  1. 【Ant Design Pro 三】样式动态绑定 react样式绑定
  2. mysql 面试知识点笔记(二)查询优化及索引越多越好吗?
  3. 06-Flutter移动电商实战-dio基础_Get_Post请求和动态组件协作
  4. mysql5.7 备份
  5. C#LeetCode刷题-哈希表
  6. SAP HANA Backup and Recovery
  7. Dreamweaver做网页
  8. MATLAB—隐函数绘图
  9. 双向循环链表实现—通讯录(学生管理系统,自行车管理系统,影院管理系统)—C语言课设(万能模板)—数据结构—用文件存储数据
  10. Unity3D Asset文件导出3DMax 可编辑格式
  11. iNFTnews|Web3走进FIFA世界杯
  12. SOFTICE之后继有人——Syser
  13. ChatGPT指令大全(建议收藏)
  14. Telink Mesh简单安卓app分析
  15. 116张!2021年最全铁塔排名(含图片)值得收藏!
  16. 一元函数、多元函数的泰勒公式
  17. 苹果保修期多久_苹果和安卓数据线怎么选?一根数据线质保三年,小米生态链做到了...
  18. 用计算机验证克莱姆法则,克莱姆法则的几种证明方法
  19. Java求实际利率之Excel函数RATE
  20. 基于 Tensorflow 轻松实现 XOR 运算!| CSDN 博文精选

热门文章

  1. 前端开发一些很有用的工具
  2. C#学习笔记(十一):动态类型
  3. Command 传参的几种方式
  4. Atititi tesseract使用总结
  5. 使用try-with-resources替代try finally释放资源
  6. postgresql9.5 run 文件linux安装后配置成开机服务
  7. 1477: 青蛙的约会
  8. 图像传感器之CMOS(2)
  9. 渐入“衰”境:警惕企业的六大老人病
  10. mysql concat例子_MYSQL中CONCAT详解