请选择 进入手机版 | 继续访问电脑版

python中网络编程总结(udp,tcp)

[复制链接]
三兄弟沙发谢洪江 发表于 2020-12-31 19:25:04 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
一、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注意事项
 


 









来源:https://blog.csdn.net/qq_41842628/article/details/85987272
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )