一、简介

scoket(套结字)在python就是模块

二、分类

基于文件型(不用)

基于网络型

名字:AF_INET

  AF_INET6

三、scoket应用

1、基于tcp

长连接:基于tcp的Server端只能和一台Client端进行数据传输

特点

  必须先运行Server端,再运行Client端

  在Server端,第一次可以接收或发送信息  

# server端,基于tcp协议
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8010))
sk.listen()
connect, addr = sk.accept()
ret = connect.recv(1024).decode('utf-8')
print(ret)
connect.send(bytes('hello', encoding='utf-8'))
connect.close()
sk.close()
# client端,基于tcp协议
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 8010))
sk.send(bytes('你好', encoding='utf-8'))
ret = sk.recv(1024).decode('utf-8')
print(ret)
sk.close()
# server端,基于tcp协议
"""
优化,实现简单的对话功能
"""
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 8010))
sk.listen()
connect, addr = sk.accept()
while 1:
ret = connect.recv(1024).decode('utf-8')
print(ret)
if ret == 'byte':
break
info = input('server>>>')
connect.send(bytes(info, encoding='utf-8'))
connect.close()
sk.close()
# client端,基于tcp协议
"""
优化,实现简单的对话功能
"""
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 8010))
while 1:
info = input('client>>>')
sk.send(bytes(info, encoding='utf-8'))
if info == 'byte':
break
ret = sk.recv(1024).decode('utf-8')
print(ret) sk.close()

注意:

1)sk.accept()和sk.connect(),里面是tuple

2)在bind前加

sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

3)网络传输用bytes类型

4)客户端和服务器的send和recv是相互关联的

2、基于udp协议

基于udp协议,不需要监听和连接,发送和接收都有两个参数(信息,地址)

特点:

  Server端和Client端运行的顺序没有先后

  在Server端,第一次只能接收信息

"""
基于udp协议
Server端
聊天系统
"""
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1', 8010))
while 1:
msg, addr = sk.recvfrom(1024)
new_msg = msg.decode('utf-8')
print(new_msg)
# if new_msg == 'byte':
# break
info = input('Server>>>')
sk.sendto(info.encode('utf-8'), addr)
if info == 'byte':
break
sk.close()
"""
基于udp协议
Client端
"""
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1', 8010)
while 1:
info = input('Client1>>>')
new_info = ('来自Client的消息:' + info).encode('utf-8')
sk.sendto(new_info, ip_port)
if info == 'byte':
break
msg, addr = sk.recvfrom(1024)
new_msg = msg.decode('utf-8')
print(new_msg)
if new_msg == 'byte':
break
sk.close()
"""
基于udp协议
Client2端
"""
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1', 8010)
while 1:
info = input('Clinet2>>>')
new_info = ('来自Client2的消息:' + info).encode('utf-8')
sk.sendto(new_info, ip_port)
if info == 'byte':
break
msg, addr = sk.recvfrom(1024)
new_msg = msg.decode('utf-8')
print(new_msg)
if new_msg == 'byte':
break
sk.close()

注意:

  发送和接收数据,有两个参数(数据,地址)

  Server端不需要监听和连接,Client端不需要连接

  网络传输的数据类型是bytes,注意字符编码

  Server端第一次只能接收信息

python scoket的更多相关文章

  1. [ PyQt入门教程 ] PyQt+socket实现远程操作服务器

    来需求了..干活啦.. 需求内容 部分时候由于缓存刷新.验证码显示不出来或者浏览器打不开或者打开速度很慢等原因,导致部分测试同事不想使用浏览器登录服务器执行命令.期望有小工具可以替代登录浏览器的操作, ...

  2. python学习笔记-(十二)scoket编程基础

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...

  3. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  4. 初识python:scoket 单用户互发消息

    实现功能: 启动"服务器".通过"客户端1"连接"服务器",然后互发消息.在此过程中,有"客户端2"连接到"服 ...

  5. python方式实现scoket通信

    要想明白这个网络通信还真的是离不开实现它实现流程图,看明白了大体很多都知道,觉得这个博主画的不错,地址是 http://www.cnblogs.com/wangcq/p/3520400.html 1. ...

  6. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  7. Python第八天

    Python面向对象进阶 一.静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过 ...

  8. python——面向对象篇之异常和反射

    内置函数isinstance和issubclass 1.1 isinstance用法: isinstance(string,str) 判断第一个参数是否是第二个参数的子集,例如: print isin ...

  9. python多线程网络编程

    背景 使用过flask框架后,我对request这个全局实例非常感兴趣.它在客户端发起请求后会保存着所有的客户端数据,例如用户上传的表单或者文件等.那么在很多客户端发起请求时,服务器是怎么去区分不同的 ...

随机推荐

  1. 性能测试基础-HTTP用例设计

    JSON格式请求: web_custom_request("https://xx.xx.xx.xx:xx/pvcpappinf//msgcustomization/xinPowGenDay, ...

  2. Linux 内核提交 urb

    一旦 urb 被正确地创建,并且被 USB 驱动初始化, 它已准备好被提交给 USB 核心来发送 出到 USB 设备. 这通过调用函数 usb_submit_urb 实现: int usb_submi ...

  3. Centos7网络连接不上:Network is unreachable 解决方案

    有朋友的centos7装在虚拟机上挂起后在打开不能正常连接网络,我的也出现了这个问题,试着用dhclient重新分配一下地址,无奈系统提示dhclient正在运行,没办法只能试试其它办法,之后研究了一 ...

  4. k8s生产环境部署

    建议配置: 服务器 900G*2 SSD 安装操作系统 CPU 16核心*2 40G网卡*2 RAM 64G*8 操作系统建议:Centos7.4/Centos 7.6 不建议使用CentOS8 分布 ...

  5. FreeNOS学习3——了解目录结构和Main函数

    下载源码的文件夹,看到里面有以下内容: 解释一下里面都有啥 lib -> 共享代码 1.libfs 文件系统(磁盘管理) 2.liballoc 内存分配和虚拟内存映射(内存管理) 3.libex ...

  6. TCP/IP IGMP:Internet组管理协议

    1.概述 IGMP协议,让一个物理网络上的所有系统知道主机所在的多播组,ICMP作为IP层的一部分,通过IP数据报进行传输,有固定的报文长度.通过IP首部协议字段值为2指明 类型为1说明是多播路由器发 ...

  7. 我的 2019 年 Python 文章榜单

    现在是 2020 年的第一天,我相信从昨天开始,各位的信息流里肯定充斥了各式各样的年度盘点/回顾/总结/记录之类的内容.虽然来得稍晚了,但我还是想给诸位送上这一篇文章. 我将在本文中列出自己于 201 ...

  8. 使用app-inspector时报错connect ECONNREFUSED 127.0.0.1:8001的解决方案

    在使用 app-inspector -u udid时,报错如图所示 输入如下命令即可解决 npm config set proxy null 再次启动app-inspector即可成功

  9. mysql主从之基于gtid的主从复制

    一 GITD介绍 1.1 gtid的含义 Global Transaction Identifier,全局事务标识 阿里云的rds目前已经使用gtid 基于gtid的主从复制原理 每个mysql数据库 ...

  10. [NLP自然语言处理]谷歌BERT模型深度解析

    我的机器学习教程「美团」算法工程师带你入门机器学习   已经开始更新了,欢迎大家订阅~ 任何关于算法.编程.AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主 ...