python scoket
一、简介
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的更多相关文章
- [ PyQt入门教程 ] PyQt+socket实现远程操作服务器
来需求了..干活啦.. 需求内容 部分时候由于缓存刷新.验证码显示不出来或者浏览器打不开或者打开速度很慢等原因,导致部分测试同事不想使用浏览器登录服务器执行命令.期望有小工具可以替代登录浏览器的操作, ...
- python学习笔记-(十二)scoket编程基础
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ...
- 初识python:scoket 单用户互发消息
实现功能: 启动"服务器".通过"客户端1"连接"服务器",然后互发消息.在此过程中,有"客户端2"连接到"服 ...
- python方式实现scoket通信
要想明白这个网络通信还真的是离不开实现它实现流程图,看明白了大体很多都知道,觉得这个博主画的不错,地址是 http://www.cnblogs.com/wangcq/p/3520400.html 1. ...
- Python之路【第七篇】python基础 之socket网络编程
本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket 网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...
- Python第八天
Python面向对象进阶 一.静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过 ...
- python——面向对象篇之异常和反射
内置函数isinstance和issubclass 1.1 isinstance用法: isinstance(string,str) 判断第一个参数是否是第二个参数的子集,例如: print isin ...
- python多线程网络编程
背景 使用过flask框架后,我对request这个全局实例非常感兴趣.它在客户端发起请求后会保存着所有的客户端数据,例如用户上传的表单或者文件等.那么在很多客户端发起请求时,服务器是怎么去区分不同的 ...
随机推荐
- poj 3275 "Ranking the Cows"(DFS or Floyd+bitset<>)
传送门 题意: 农场主 FJ 有 n 头奶牛,现在给你 m 对关系(x,y)表示奶牛x的产奶速率高于奶牛y: FJ 想按照奶牛的产奶速率由高到低排列这些奶牛,但是这 m 对关系可能不能精确确定这 n ...
- Spring Security 5.x兼容多种密码加密方式
1 spring security PasswordEncoder spring security 5不需要配置密码的加密方式,而是用户密码加前缀的方式表明加密方式,如: {MD5}88e2d8cd1 ...
- 基于AutoIt3的Ping、网址转IP地址,以及hosts文件写入
#include <Constants.au3> #include <GUIConstantsEx.au3> GUICreate("通讯测试-eip.hxgroup. ...
- jQuery-自己封装的弹框
(function () { CDK={ cfm:function(resFun,errFun){ var confirm=document.createElement('div'); confirm ...
- 随机抽样 (numpy.random)
随机抽样 (numpy.random) 简单的随机数据 rand(d0, d1, ..., dn) 随机值 >>> np.random.rand(3,2) array([[ 0.14 ...
- 深入理解CSS盒模型(转)
转自:https://www.cnblogs.com/chengzp/p/cssbox.html 基本概念 盒模型的组成大家肯定都懂,由里向外content,padding,border,margin ...
- js中的克隆
1.如果克隆对象是基本类型,直接复制就可以 <script type="text/javascript"> var str1 = 'abc' var str2 = st ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(1)之数据库设计
本文主要讲解本项目网站所应用到的知识点,及数据库的相关设计: 一.知识点 (1)本项目主要采取ASP.NET MVC的编程模式,相信你已经了解到了MVC的具体含义是什么,这里不再赘述,有不了解的朋友, ...
- 浅谈vue $mount()
Vue 的$mount()为手动挂载,在项目中可用于延时挂载(例如在挂载之前要进行一些其他操作.判断等),之后要手动挂载上.new Vue时,el和$mount并没有本质上的不同. 具体见代码: 顺便 ...
- 数据多js平均时间取固定条数展示,echarts数据多处理数据
js代码: function getfailurerate(start,end,ip) { $.ajax( { url : "report/getvirtual.action", ...