一、简介

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. P1044 最大值最小化

    题目描述 在印刷术发明之前,复制一本书是一个很困难的工作,工作量很大,而且需要大家的积极配合来抄写一本书,团队合作能力很重要.当时都是通过招募抄写员来进行书本的录入和复制工作的, 假设现在要抄写 \( ...

  2. sqlyog提示:没有执行查询。请在 SQL 窗口中输入查询或将光标放在一个查询上。

    以下内容纯属猜测: sqlyog 在执行输入的sql语句时,对已经执行过的语句,是不会再执行的,所以出现这个问题,很可能是sql语句没有修改,就试图执行第二遍.

  3. 【土旦】vue 解决ios H5底部输入框 获取焦点时弹出虚拟键盘挡住输入框 以及监听键盘收起事件

    问题描述 im聊天H5页面,在iOS系统下,inpu获取焦点弹出系统虚拟键盘时,会出现挡住input的情况,十分影响用户体验. bug图 解决方法: html: <input type=&quo ...

  4. 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)

    牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...

  5. jQuery的使用及关于框架造型 专题

    Introduction 正如jQuery所宣称的一样,Write Less, Do More.很多时候我们喜欢用它来解决问题.但增加一个库必然意味着更大的网络负担,意味着更高的页面初始载入时间.并且 ...

  6. 使用BFD检测EBGP邻居

    在广域网BGP环境中,通常使能BFD以快速实现链路故障后的路由的主动收敛. BFD使用UDP在链路上进行双向检测,BFD有Echo mode和asynchronous mode两种模式,默认为Echo ...

  7. form提交时accept-charset属性在IE及Edge下不起作用解决方案

    问题描述 我的页面是utf-8编码 目标页面是EUC-JP编码 即使已经设置了accept-charset="EUC-JP",提交后IE 和 Edge下还是乱码 解决方案: 1. ...

  8. C++Review3_关于C++各种概念的串联与梳理

    经过前面两个Review,对代码复用,类的继承概念有了进一步理解. 这里再做一次复盘,把其他概念也串联起来构成一个知识框架. 首先是类和对象的概念.对象指的是特征与技能的结合体,面向对象编程思想的好处 ...

  9. 一点资讯 视频抓取 phantomjs

    # _*_ coding: utf- _*_ """ 思路: .列表页使用phantomjs模拟点击.每个链接只抓取第一页9-10条内容,按照标题去重 .布置定时任务,每 ...

  10. 使用springboot + druid + mybatisplus完成多数据源配置

    一. 简介 1. 版本 springboot版本为2.0.3.RELEASE,mybatisplus版本为2.1.9, druid版本为1.1.9,swagger版本为2.7.0 2. 项目地址   ...