Python网络编程

TCP(复杂可靠)与UDP(简单不可靠)的区别

1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制); UDP提供无连接的传输,通信前不需要建立连接。
2) TCP提供可靠的传输(有序,无差错,不丢失,不重复); UDP提供不可靠的传输。
3) TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组; UDP是面向数据报的传输,没有分组开销。
4) TCP提供拥塞控制和流量控制机制; UDP不提供拥塞控制和流量控制机制。

windows 下查看IP地址方法

  1. win+R
  2. cmd
  3. ipconfig

套接字可以同时收发,特性是全双工(可多个同时收发,电话),半双工只能接收或发送(对讲机),单工只能发(收音机)3

一,UDP

接受数据

import socket
def main():# 1创建套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2绑定一个本地信息localaddr = ("", 8080)udp_socket.bind(localaddr)while True:# 3接受数据recv_date = udp_socket.recvfrom(1024)# recv_date这个变量储存的是一个元组(接收到的数据,(发送方的IP,端口))recv_msg = recv_date[0]send_addr = recv_date[1]# 4打印接受数据,recv_msg接受到的是字节,需要解码成汉字用utf-8# print(recv_date)print("%s:%s" % (str(send_addr), recv_msg.decode("utf-8")))# 5关闭套接字udp_socket.close()if __name__ == '__main__':main()

发送数据

import socketdef main():# 1.创建套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2,从键盘获取数据数据while True:send_date = input("请输入要发送的内容:")udp_socket.sendto(send_date.encode("utf-8"), ("192.168.137.1", 8080))# 3,关闭套接字udp_socket.close()if __name__ == '__main__':main()

二,聊天器实战(UDP)

import socketdef send(udp_socket):dest_ip = input("请输入对方的IP")dest_port = int(input("请输入对方的端口"))send_date = input("请输入要发送的消息")udp_socket.sendto(send_date.encode("utf-8"), (dest_ip, dest_date))def receive(udp_socket):recv_date = udp_socket.recvfrom(1024)print("%s : %s" % (recv_date[1], recv_date[0].decode("utf-8")))def main():# 创建套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定端口udp_socket.bind(("", 7789))print("=" * 50)print("欢迎来到梦码交流 1.0")print("1, 发送消息")print("2, 接收消息")print("3,退出系统")print("=" * 50)# while循环处理事情while True:op = input("请选择执行的操作: ")if op == '1':# 发送send(udp_socket)elif op == '2':# 接受并显示receive(udp_socket)elif op == '3':print("欢迎下次使用")breakelse:print("输入有误,请重新输入")if __name__ == '__main__':main()

三,TCP

服务器端

  1. 创建socket对象 socket.socket(socket.AF_INET,socket.SOCK_STREAM)(监视套接字)
  2. 绑定一个IP地址和端口号bind((" ",8000)) //默认本地
  3. 服务端监听操作时刻注意是否有客户端请求
  4. 同意连接请求accept() #返回一个二元元组,第一个是建立新服务器套接字,第二个是客户端地址
  5. recv(1024)接收数据#设定一次可以接收1024字节大小
  6. print(data.decode())#传过来的字节流需要用decode()解码
  7. 关闭新建套接字和监视套接字
import socketdef main():# 创建套接字(监听套接字)tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口tcp_socket.bind(("", 8080))# 让默认套接字由主动改为被动(listen)tcp_socket.listen(128)# 使用while循环,从而为多个客户端服务while True:print("等待客户端连接的到来...")# 等待客户端连接的到来 accept,返回元组,第一个是服务套接字,第二个为客户端接口new_client_socket, client_addr = tcp_socket.accept()print("一个新的客户端已经到来 %s" % str(client_addr))# 再来个while循环为一个客户端服务多次while True:# 接受客户端发来的请求recv_date = new_client_socket.recv(1024)print("客户端发来的请求是:%s" % recv_date.decode("utf-8"))# 如果recv解堵塞,有两种方式# 客户端发来数据# 客户端调用close导致if recv_date :new_client_socket.send("请求已经收到。。".encode("utf-8"))else:break# 服务完一个客户端需要关闭服务套接字new_client_socket.close()if __name__ == '__main__':main()

客户端

  1. import socket #导入模块
  2. SOCK_STREAM—TCP协议方式
  3. AF_INET----我的是ipv4地址
  4. 创建socket对象:指定传输协议 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  5. 建立连接发送连接请求 IP地址和端口号 s.connect((‘127.0.0.1’,8000))
  6. s.send(“你好”.encode()) #只能发送字节流需要用encode转码字符串成字节,不然无法发送文件
  7. 关闭套接字
import socketdef main():# 1.创建套接字tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2,连接服务器 connecttcp_socket.connect(("169.254.164.239", 8888))# 2,从键盘获取数据数据while True:send_date = input("请输入要发送的内容(输入0键退出):")if send_date == '0':break# send直接发送内容tcp_socket.send(send_date.encode("utf-8"))# 3,关闭套接字tcp_socket.close()if __name__ == '__main__':main()

四,下载器实战(TCP)

客户端

import socketdef main():# 1创建套接字tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2获取服务器IP和端口# dest_id = input("请输入下载服务器的IP:")# dest_port = input("请输入下载服务器的端口:")# 3连接服务器tcp_socket.connect(("169.254.164.239", 6789))# 4获取下载文件名download_file_name = input("请输入要下载的文件名:")# 5将文件名发送给服务器tcp_socket.send(download_file_name.encode("utf-8"))# 6接受文件中的数据recv_date = tcp_socket.recv(1024)# 7如果成功接收到数据,保存数据到文件中if recv_date:with open("【新】" + download_file_name, "wb")as file:file.write(recv_date)# 8关闭套接字tcp_socket.close()if __name__ == '__main__':main()

服务器端

import socketdef send_file_to_client(new_client_socket, client_addr):# 1,接收客户端需要下载的文件名file_name = new_client_socket.recv(1024).decode("utf-8")print("客户端%s需要下载文件:%s" % (client_addr, file_name))# 2,打开文件,读取数据file_content = Nonetry:file = open(file_name, "rb")file_content = file.read()file.close()except Exception as ret:print("没有要下载的文件:%s" % file_name)# 3,发送文件数据给客户端if file_content:print("%s 文件发送成功" % file_name)new_client_socket.send(file_content)def main():# 1,创建套接字tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 2,绑定本地信息tcp_server_socket.bind(("", 6789))# 3,让默认套接字由主动变为被动tcp_server_socket.listen(128)while True:print("等待客户端连接的到来...")# 等待客户端连接的到来 accept,返回元组,第一个是服务套接字,第二个为客户端接口new_client_socket, client_addr = tcp_server_socket.accept()print("一个新的客户端已经到来 %s" % str(client_addr))# 5,调用发送文件函数send_file_to_client(new_client_socket, client_addr)# 6,关闭套接字new_client_socket.close()if __name__ == '__main__':main()

结语

前面花了几天时间复习python基础语法和面向对象知识,现在开始除了每天上网课外,就会抽时间深入学习python相关知识,继续加油,奥里给!!

道友们可以加我的微信公众号 梦码城 ,接下来的日子里我会在公众号上发布各种与编程方面的总结学习知识,也会送各位小伙伴大量的学习资源,梦码城,期待你的加入

Python网络编程——TCP与UDP相关推荐

  1. QT入门第七天 网络编程TCP/IP/UDP+Http和JSON解析+qt事件软键盘【CSDN最详细】

    网络编程+Http和JSON解析+qt事件软键盘 第一章 QT中的网络编程 [1]涉及到的类 [2]tcp协议的流程 [2.1]服务器的流程 socket-->bind-->listen- ...

  2. 网络编程 | tcp协议 | udp协议 | 三次握手与四次挥手

    目录 网络编程 为什么要用网络编程 软件开发的结构 1. C/S架构 2.B/S架构 网络基础 一个程序如何在网络上找到另一个程序? ip地址 什么是端口 远程数据传输发展史 OSI七层网络模型 前言 ...

  3. linux网络编程tcp和udp基本函数调用过程及如何选择

    1. socket编程 1.1 概述 TCP是TCP/IP体系中面向连接的传输层协议,它提供全双工和可靠交付的服务.它采用许多机制来确保端到端结点之间的可靠数据传输,如采用序列号.确认重传.滑动窗口等 ...

  4. 深入浅出网络编程TCP,UDP,Socket,Http网络编程面试题

    目录 什么是网络编程 网络编程中的主要问题 计算机网络体系结构 TCP / UDP Socket HTTP 什么是网络编程 网络编程中的主要问题 计算机网络体系结构 OSI 参考模型         ...

  5. [Python 网络编程] TCP、简单socket模拟ssh (一)

    OSI七层模型(Open System Interconnection,开放式系统互联) 应用层网络进程访问应用层:为应用程序进程(例如:电子邮件.文件传输和终端仿真)提供网络服务:提供用户身份验证表 ...

  6. python web开发 网络编程 TCP/IP UDP协议

    文章目录 1. TCP/IP协议 1.1 IP协议 1.2 TCP协议 2. UDP协议 3. Socket 4. TCP编程 4.1 创建TCP服务器 4.2 创建TCP客户端 4.3 简易聊天工具 ...

  7. Python网络编程-----TCP

    1.TCP TCP通信模型中,在通信开始之前,⼀定要先建⽴相关的连接,才能发送数据,类似于⽣活中,"打电话".TCP编程分为客户端和服务器端两部分组成,所以我们需要首先完成服务器端 ...

  8. python网络编程—TCP协议(二)

    一.TCP协议的原理图 每个客户端与服务端通讯是互不干扰的 二.注意点 1.tcp服务器─般情况下都需要绑定,否则客户端找不到这个服务器 2.tcp客户端一般不绑定,因为是主动链接服务器,所以只要确定 ...

  9. python网络编程—TCP协议(一)

    一.TCP协议示意图: listen():监听客户端的连接,客户端有链接,listen马上就有返回. accept():连接之后,会返回客户端的信息(ip地址.端口号),如果没有连接则一直堵塞.连接成 ...

最新文章

  1. CSP CCF 201709-2 公共钥匙盒(C++)满分代码,有注释
  2. G - 数据结构实验之查找七:线性之哈希表
  3. 英语语法---从句总结
  4. dede织梦背景经常使用标签
  5. Java左上到右下,java – 如何从上到下然后从左到右填充Gri...
  6. ubuntu12.04安装教程
  7. abap开发注释快捷键_让ABAP开发者更加轻松的若干快捷键
  8. https加密过程(详细)
  9. c#winform演练 ktv项目 播放歌曲同时显示歌曲名称与歌手
  10. python integer怎么用_Python core.integer方法代码示例
  11. 数据可视化黑科技!它比python强大20倍
  12. 计算机病毒解析与防范结束语,2016年04月30日计算机病毒解析与防范题纲_向必青.doc...
  13. Python3选择支持非ASCII码标识符的缘由
  14. 2021年,我已经说服 27 个人不上培训机构了
  15. javascript 中文转拼音代码
  16. 计算机如何连接wifi台式,台式机怎么连接wifi_台式机连接wifi教程-太平洋IT百科...
  17. 【JVM】字节码与ASM字节码增强、Instrument实现类的动态重加载
  18. 共模电感(扼流圈)选型
  19. 悲观锁、乐观锁以及分布式锁
  20. BackTrack安装

热门文章

  1. Oracle中VARCHAR2转换TIMESTAMP
  2. 爱回收首次实现全年盈利,2022年营收达98.7亿元
  3. 10个好玩到爆的网站,打开就能玩,个个超有趣
  4. Baeldung Java 周评 | 第六十一弹(关键词:可移植并支持云的 HTTP 会话、Java 一流的 Money 及 Currency 支持、Java 8 内存管理改进、HTTP 2 客户端)
  5. 天乩之白蛇传说 全 集 百 度 云 网 盘 资 源
  6. Js 常用的格式验证(手机号、邮箱,身份证)
  7. 三种激活函数——Sigmoid,Tanh, ReLU以及卷积感受野的计算
  8. 3.3 详细讲解弧线工具 [Illustrator CC教程]
  9. 免费pdf转换成ppt转换器下载
  10. 用友指定的服务器不可用,解决用友:不能建立跟应用服务器(xxx机器名)所指向的数据库服务器连接...