一、简介

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. cccc初赛 L3-003 长城

    L3-009. 长城 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 邓俊辉 正如我们所知,中国古代长城的建造是为了抵御外敌入侵.在长 ...

  2. Sublime Text 安装中文、英文字体

    在 Sublimte Text 如何使用默认的字体,英文好看,但是中文不好,所以我就找了一个支持中文英文的字体 YaHei Consolas Hybrid 这个字体看起来效果比较差 下载地址: 如果无 ...

  3. vue项目上滑滚动加载更多&下拉刷新

    上滑滚动时获取内容高度.屏幕高度和滚动高度(此处#sslist要为内容是id) 内容高度  let innerHeight = document.querySelector("#sslist ...

  4. C# 多线程的等待所有线程结束

      //前台线程和后台线程唯一区别就是:应用程序必须运行完所有的前台线程才可以退出://而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,//所有的后台线程在应用程序退出时都会自动结束 ...

  5. 2019浙江ACM省赛——部分题目

    有一些题目过了我还没有重新写,先放一些我重新写好了的吧 签到题拿到了信心吧,9分钟写完两题,我们贼开心,我大哥说签到题有什么好开心的,如果不是我有一些地方卡了下,可能还是更快吧,还有就是测试案例多试了 ...

  6. Java Developer's Guide to SSL Certificates

    https://www.codebyamir.com/blog/java-developers-guide-to-ssl-certificates Overview When developing w ...

  7. 关于启动php-fpm失败的解决办法

    当我执行 sudo lnmp php-fpm restart会出现如下错误 Starting php-fpm /usr/local/php/sbin/php-fpm: error while load ...

  8. python元祖(tuple)

    # 列表:有序,元素可以被修改 # 列表 # list # li = [111,22,33,44] # 元组:元素不可被修改,不能被增加或者删除 # ps: # tuple # tu = (11,22 ...

  9. Visio图像应用

    图像插入: 直接搜索然后插入 CAD是工程绘图. CAD属性设置框 下面是图像编辑: 通过格式中的旋转进行调整 但是CAD格式的图没有格式 图片可以设置题注 图片层次的使用 CAD图片颜色的修改在 图 ...

  10. 一次面试题,将 字符串 保存在 Byte 数组中

    最近在面试,遇到一个面试题 字符串 String str = "AD428C93DE" 编程实现把 str 的内容放到 Byte[6] b 的数组中,存入后并能恢复原来的字符串. ...