python之路----TCP与UDP
TCP
import socket
#tcp协议
sk = socket.socket() # 买手机 创建一个socket对象
sk.bind(('127.0.0.1',8080)) # 给server端绑定一个ip和端口
sk.listen() # py3.4
while True:
conn,addr = sk.accept() # 获取到一个客户端的连接, 已经完成了三次握手建立了一个连接
# 阻塞
while True:
msg = conn.recv(1024).decode('utf-8') # 阻塞,直到收到一个客户端发来的消息
print(msg)
if msg == 'bye':break
info = input('>>>')
if info == 'bye':
conn.send(b'bye')
break
conn.send(info.encode('utf-8')) # 发消息
conn.close() # 关闭连接
sk.close() # 关闭socket对象,如果不关闭,还能继续接收
# server client1 建立了长连接
# client2
server
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
while True:
msg = input('>>>')
if msg == 'bye':
sk.send(b'bye')
break
sk.send(msg.encode('utf-8'))
ret = sk.recv(1024).decode('utf-8')
if ret == 'bye':break
print(ret)
sk.close()
client
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
while True:
msg = input('client2:>>>')
if msg == 'bye':
sk.send(b'bye')
break
sk.send(('client2 :'+msg).encode('utf-8'))
ret = sk.recv(1024).decode('utf-8')
if ret == 'bye':break
print(ret)
sk.close()
client2
UDP
import socket
sk = socket.socket(type=socket.SOCK_DGRAM) #DGRAM datagram
sk.bind(('127.0.0.1',8080)) #只有服务端有的 msg,addr = sk.recvfrom(1024)
print(msg.decode('utf-8'))
sk.sendto(b'bye',addr) sk.close()
server
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1',8080) sk.sendto(b'hello',ip_port)
ret,addr = sk.recvfrom(1024)
print(ret.decode('utf-8')) sk.close()
client
UDP协议实现qq聊天
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',8080))
while True:
msg,addr = sk.recvfrom(1024)
print(addr)
print(msg.decode('utf-8'))
info = input('>>>').encode('utf-8')
sk.sendto(info,addr) sk.close()
server
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1',8080)
while True:
info = input('tiger :')
info = ('\033[34m来自tiger的消息 :%s\033[0m'%info).encode('utf-8')
sk.sendto(info,ip_port)
msg,addr = sk.recvfrom(1024)
print(msg.decode('utf-8')) sk.close()
client1
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1',8080)
while True:
info = input('二哥 :')
info = ('\033[32m来自二哥的消息 :%s\033[0m'%info).encode('utf-8')
sk.sendto(info,ip_port)
msg,addr = sk.recvfrom(1024)
print(msg.decode('utf-8')) sk.close()
client2
UDP实现系统时间同步
# 提供服务
# 接收信息 时间的格式
# 将我的时间转换成 接受到的格式
# 发回给客户端
import time
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',8090))
while True:
strf,addr = sk.recvfrom(1024)
strf = strf.decode('utf-8')
res = time.strftime(strf).encode('utf-8')
sk.sendto(res,addr)
sk.close()
server
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
addr = ('127.0.0.1',8090)
info = input('>>>').encode('utf-8')
sk.sendto(info,addr)
ret,addr = sk.recvfrom(1024)
print(ret.decode('utf-8')) sk.close()
client
python之路----TCP与UDP的更多相关文章
- python 网络编程 tcp和udp 协议
1. 网络通信协议 osi七层,tcp\ip五层 tcp\ip五层 arp协议:通过IP地址找到mac地址 2.tcp和udp的区别 tcp协议:面向连接,消息可靠,相对udp来讲,传输速度慢,消息是 ...
- python中的TCP及UDP
python中是通过套接字即socket来实现UDP及TCP通信的.有两种套接字面向连接的及无连接的,也就是TCP套接字及UDP套接字. TCP通信模型 创建TCP服务器 伪代码: ss = sock ...
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...
- python socket 编程(TCP与UDP)
实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- 利用python实现TCP和UDP服务器
利用python的socket模块可以实现基本的网络编程,并且只限于一对一的连接.当然,也可以在其基础上实现一个网络服务器,但由于太底层这种做法不被推荐.其实如果要实现一个网络服务器很简单,调用pyt ...
- python网络编程socket编程(TCP、UDP客户端服务器)
摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...
- Python TCP与UDP的区别
TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP通信需要经过创建连接.数据传送.终止连接 ...
- python笔记28(TCP,UDP,socket协议)
今日内容 1.TCP协议 协议的特点:三次握手,四次挥手: 2.UDP协议 3.OSI七层模型:每层的物理设备,每一层协议. 4.代码部分: ①介绍socket: ②使用socket完成tcp协议的w ...
随机推荐
- Shell case
case 值 in模式1) command1 command2 command3 ;;模式2) command1 command2 command3 ;;*) command1 command2 co ...
- 如何搭建SoC项目的基本Testbench【zz】
原文地址:http://bbs.eetop.cn/thread-442797-1-8.html 写这个文档的目的是让大家对搭建SoC项目的Testbench有一个比较清晰的认识,可以根据这个文档来一步 ...
- php小记
php获取日期: date_default_timezone_set('PRC'); //默认时区 "今天:",date("Y-m-d",time()),&qu ...
- Python重要基础点
这里记录一些实际编写代码时遇到的常用/重要的内容,有前辈的,也有自己整理加进来的. 以点的形式记录,之后遇到的内容会慢慢补充进来 1. 斜杠 / :斜字第一笔, 转义用反斜杠 \ : 转的最后一笔 2 ...
- 专访|HPE软件部中国区总经理李时:HPE引领IT战略新形态
2016年7月22日,「HPE&msup软件技术开放日」将在上海举办,msup携手HPE揭秘全球测试中心背后的12条技术实践. 李时:HPE软件部中国区总经理,将在本次开放日带来<HP ...
- Python开发【笔记】:什么是RESTful框架
RESTful框架 前言: 一句话总结:用URL定位资源,用HTTP描述操作 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- mysql 数据操作 多表查询 多表连接查询 全外连接
全外连接:显示左右两个表全部记录 全外连接 在内连接的基础上保留左右两表没有对应关系的记录 full join #注意:mysql不支持全外连接 full JOIN mysql> select ...
- android studio常用控件
1.Button设置不同的样式 <?xml version="1.0" encoding="utf-8"?> <selector xmlns: ...
- [py]约瑟夫问题-循环队列
约瑟夫问题(历史战争问题) 直观理解 老外视频讲解 模拟器演示 约瑟夫问题 数学姥公众号 讲的最清楚 背景及,推倒过程讲解得很清晰,旨在提高人们对数据的兴趣 简单说下: 几个人围成一圈(循环队列), ...
- 谷歌浏览器:audio如何隐藏下载按钮
当我们使用原生的audio标签时,可以看到如下的效果. 那么如何让下载按钮隐藏掉呢? 1. controlsList="nodownload" // 这个方法只支持 Chrome ...