一、udp用户数据报协议(写信的模型:在通信开始,不需要建立相关的连接,只需要发送数据即可,类似于生活中的写信)(不安全:发的消息可能会丢,对方不会请求再发一遍)

1.ipv4:_ _ _ ._ _ _ . _ _ _ ._ _ _ 192.168.1.1

注:192.168 是代表的同一个网络下会同一个编号,1.1是代表主机的编号

2.端口:

知名端口:不能随便用的1—1023(端口号是固定的)

动态端口:1024—65535(是指当一个系统程序或应用程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用)

(80端口分配给HTTP服务,21端口分配给FTP服务)

4.程序运行起来的程序就叫进程

5. udp发送

注:用 (ping ip地址)查看是否能与对方的ip进行通讯

注:如果不能完成通讯,VMware的虚拟网络,那不是ip地址,把VMware虚拟网停用,就可以通讯

ip地址在同一个网络不能重复,端口号在同一台电脑里面不能重复。

6、udp接收

7.udp传输模型

代码:

import socket

def send_msg(udp_socket):

"""发送消息"""

# 获取要发送的内容

dest_ip = input("请输入对方的ip:")

dest_port = int(input("请输入对方的port:"))

send_data = input("请输入要发送的消息:")

udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))

def recv_msg(udp_socket):

"""接收数据"""

recv_data = udp_socket.recvfrom(1024)

print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("utf-8")))

def main():

# 创建套接字

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定信息

udp_socket.bind(("", 6664))

# 循环循环来进行处理事情

while True:

print("-----xxx聊天器-----")

print("1:发送消息")

print("2:接收消息")

print("0:退出系统")

op = input("请输入功能:")

if op == "1":

# 发送

send_msg(udp_socket)

elif op == "2":

# 接收并显示

recv_msg(udp_socket)

elif op == "0":

break

else:

print("输入有误请重新输入...")

if __name__ == "__main__":

main()

注意:由于没有线程导致不能使发送和接收同时进行。

二、tcp传输控制协议(打电话模型)(安全:如果丢了或者数据有问题,对方可以要求再发一遍,保证数据能够被对方接收稳定性)

注:TCP通信需要经过创建连接、数据传送、终止连接三个步骤。

1、稳定性之应答模式(udp与tcp)

2、可靠传输

(1)、服务器代码:

import socket

def main():

#1.买个手机(创建套接字 socket)

tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#2.插入手机卡(绑定本地信息 bind)

tcp_server_socket.bind(("",7890))

#3.将手机设置为正常的 响铃模式(让默认的套接字由主动变为被动 listen)

tcp_server_socket.listen(128)

while True:#循环为多个客户服务

print("等待一个新的客户端到来........")

#4.等待别人的电话到来(等待客户端的链接 accept)(堵塞)

#new_client_socket接收一个新的套接字;client_addr接收一个链接你的客户端的地址(谁给我打的)

new_client_socket,client_addr=tcp_server_socket.accept()

print("一个新的客户端已经到来%s"%str(client_addr))

print(client_addr)#(是谁链接的你,返回的就是谁的ip和端口)

while True:#为同一个客户端 服务多次

#接收客户发来的请求

recv_data=new_client_socket.recv(1024)

print("客户端发送过来的请求是:%s"%recv_data)

#如果recv解堵塞,那么有2种方式:

#1.客户端发送过来数据

#2.客户端调用close导致 这里 recv解堵塞

if recv_data:#判断是否为空

#回送一部分数据给客户端;注:不需要在填写对方的ip与端口,因为上面已经创建了链接,直接回复信息就可以了

new_client_socket.send("hahaahfdsf---ok-----".encode("gbk"))

else:

break

#关闭套接字

new_client_socket.close()

print("已经为%s客户服务完毕")

tcp_server_socket.close()#关闭就不会等待新的客户xxxxx.accept就会失败

if __name__=="__main__":

main()

(2)客户端代码:

import socket

def main():

#1.创建套接字

tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#2.获取服务器的ip port

socket_ip=input("请输入对方的ip:")

socket_port=int(input("请输入对方的port"))

#3.链接服务器

tcp_socket.connect((socket_ip,socket_port),)

#4.获取下载的文件名字

download_file_name=input("请输入要下载的文件名字:")

#5.将文件名字发送到服务器

tcp_socket.send(download_file_name.encode("utf-8"))

#6.接收文件中的数据

recv_data=tcp_socket.recv(1024*1024)

#7.保存接收到的数据到一个文件中

with open("[新]"+download_file_name,"wb") as f:

f.write(recv_data)

#8.关闭套接字

tcp_socket.close()

注意:没有线程,因此只能发送等待服务器反应才能继续发送,发送与接收只能执行一个,当执行发送时就不能执行接收,当执行接收时就不能执行发送。

3.tcp注意事项

 

python中网络编程总结(udp,tcp)相关推荐

  1. 网络编程(UDP/TCP)

    1.网络模型 数据从网络中一个终端上的应用程序传送到另外一个终端的应用程序,中间需要经历很多过程,有多方参与对数据进行层层封装.转发.我们把这个流程在逻辑上进行分层,每一层根据本层的规章制度(协议)各 ...

  2. python中网络编程(持续更新)

    进程,线程和协程 进程:(进程是资源分配的最小单位.) 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它 ...

  3. Python之网络编程(基于tcp实现远程执行命令)

    文章目录 实现目标 服务端分析 客户端分析 远程执行结果 本篇是用tcp套接字实现的一个远程执行命令的小案例,tcp套接字是一种面向连接的Socekt,针对面向连接的TCP服务应用,安全,但是效率低 ...

  4. Python中网络编程对 socket accept 函数的理解

    在服务器端,socket()返回的套接字用于监听(listen)和接受(accept),这个套接字不能用于与客户端之间发送和接收数据. accept()接受一个客户端的连接请求,并返回一个新的套接字, ...

  5. Python高级网络编程系列之第一篇

    在上一篇中我们简单的说了一下Python中网络编程的基础知识(相关API就不解释了),其中还有什么细节的知识点没有进行说明,如什么是TCP/IP协议有几种状态,什么是TCP三次握手,什么是TCP四次握 ...

  6. Python之网络编程(TCP套接字与UDP套接字)

    文章目录 基于tcp的套接字 实现目标 tcp服务端源码 tcp客户端源码 tcp效果实现 基于udp的套接字 udp作用介绍 udp服务端源码 udp客户端源码 udp效果实现 用udp实现一个时间 ...

  7. Python网络编程——面向连接(TCP)和无连接(UDP)时间戳网络小程序

    网络编程--基于TCP的网络应用程序 服务器 步骤 备注 创建socket对象 关键字:AF_INET, SOCK_STREAM,其中,AF_INTE代表地址家族:因特网.SOCK_STREAM是so ...

  8. Python网络编程(UDP和TCP)

    文章目录 Python和网络编程 网络编程 1.引子 软件的开发架构 C/S架构 B/S架构 什么是网络 目的 网络通信过程 1. 2台电脑的网络 说明 2. 使用集线器组成一个网络 说明 3. 使用 ...

  9. 【Linux】网络编程三:TCP通信和UDP通信介绍及代码编写

    参考连接:https://www.nowcoder.com/study/live/504/2/16. [Linux]网络编程一:网络结构模式.MAC/IP/端口.网络模型.协议及网络通信过程简单介绍 ...

最新文章

  1. JavScript中的循环
  2. ES doc_values介绍2——本质是field value的列存储,做聚合分析用,ES默认开启,会占用存储空间...
  3. VGA光端机技术原理及应用领域介绍
  4. 论文浅尝 | HEAD-QA: 一个面向复杂推理的医疗保健数据集
  5. python itertools模块_Python标准模块--itertools
  6. POI设置excle单元格样式
  7. ubuntu 16.04 安装和卸载postman
  8. 激光雷达数据集的采集与播放(C16/C32 系列多线混合固态激光雷达)
  9. 黑苹果 服务器系统安装,黑苹果原版安装从零开始之 :MBR转GPT和新建EFI分区详细教程 _ 黑苹果乐园...
  10. Windows 禁用U盘的程序,不用注册表方式。
  11. 剑指 Offer(C++版本)系列:剑指 Offer 13 机器人的运动范围
  12. n一加关闭小部件_小部件
  13. 给每一辆车配上“×××”,老牌安企高新兴的交通新作
  14. 做最便宜的监控,旧手机变监控摄像头,还不用app
  15. 家谱树java_树家族算法梳理
  16. post提交数据返回404错误
  17. 中国十大金牌游戏策划
  18. python中doc=parased.getroot()_python实例手册.py
  19. 牛客-模拟、枚举与贪心-2022.10.18
  20. 今天比较了一下google和baidu的图片搜索

热门文章

  1. 有关bool(布尔)类型在C语言中的应用
  2. 作为一名工程师,你应该专注于成为一名通才还是专家?
  3. 【Unity实战100例】Unity万能答题系统之单选多选判断题全部通用
  4. java中imp结尾,imp java
  5. IDM百度网盘不限速下载,油猴插件完美解决下载
  6. Memory Clean 3 1.0.19 强大的mac内存清理工具
  7. 电商api—虾皮的多国数据
  8. SDUT 3222 Free Goodies(贪心+dp)
  9. 如何高效地比较两个VS(Visual Studio) Project文件
  10. 好压haozip 命令帮助