为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 网络编程 > 其它综合 正文

TCP相关知识进行补充,代码详解

三叶资源网 2022-12-17 20:18:50 其它综合 260 ℃ 0 评论

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)
 # 循环目的:调用多次accept,从而为多个客户端服务
 while True:
 print("等待一个新的客户端的到来...")
 # 4. 等待别人的电话到来(等待客户端的链接 accept)
 new_client_socket,client_addr = tcp_server_socket.accept()
 print("一个新的客户端已经到来%s" % str(client_addr))
 # 循环目的: 为同一个客户端 服务多次
 while True:
 # 接收客户端发送过来的请求
 recv_data = new_client_socket.recv(1024)
 print("客户端福送过来的请求是:%s" % recv_data.decode("utf-8"))
 # 如果recv解堵塞,那么有2种方式:
 # 1. 客户端发送过来数据
 # 2. 客户端调用close导致而了 这里 recv解堵塞
 if recv_data:
 # 回送一部分数据给客户端
 new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
 else:
 break
 # 关闭套接字
 # 关闭accept返回的套接字 意味着 不会在为这个客户端服务
 new_client_socket.close()
 print("已经为这个客户端服务完毕。。。。")
 # 如果将监听套接字 关闭了,那么会导致 不能再次等待新客户端的到来,即xxxx.accept就会失败
 tcp_server_socket.close()
if __name__ == "__main__":
 main()

客户端实现文件下载


import socket

def main():
 # 1. 创建套接字
 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 # 2. 获取服务器的ip port
 dest_ip = input("请输入下载服务器的ip:")
 dest_port = int(input("请输入下载服务器的port:"))
 # 3. 链接服务器
 tcp_socket.connect((dest_ip, dest_port))
 # 4. 获取下载的文件名字
 download_file_name = input("请输入要下载的文件名字:")
 # 5. 将文件名字发送到服务器
 tcp_socket.send(download_file_name.encode("utf-8"))
 # 6. 接收文件中的数据
 recv_data = tcp_socket.recv(1024) # 1024--->1K 1024*1024--->1k*1024=1M 1024*1024*124--->1G
 if recv_data:
 # 7. 保存接收到的数据到一个文件中
 with open("[新]" + download_file_name, "wb") as f:
 f.write(recv_data)
 # 8. 关闭套接字
 tcp_socket.close()
if __name__ == "__main__":
 main()

文件下载服务器端

import socket

def send_file_2_client(new_client_socket, client_addr):
 # 1. 接收客户端 需要下载的文件名
 # 接收客户端发送过来的 要下载的文件名
 file_name = new_client_socket.recv(1024).decode("utf-8")
 print("客户端(%s)需要下载文件是:%s" % (str(client_addr), file_name))
 file_content = None
 # 2. 打开这个文件,读取数据
 try:
 f = open(file_name, "rb")
 file_content = f.read()
 f.close()
 except Exception as ret:
 print("没有要下载的文件(%s)" % file_name)
 # 3. 发送文件的数据给客户端
 if file_content:
 # new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
 new_client_socket.send(file_content)

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:
 # 4. 等待别人的电话到来(等待客户端的链接 accept)
 new_client_socket, client_addr = tcp_server_socket.accept()
 # 5. 调用发送文件函数,完成为客户端服务
 send_file_2_client(new_client_socket, client_addr)
 # 6. 关闭套接字
 new_client_socket.close()
 tcp_server_socket.close()

if __name__ == "__main__":
 main()

Tags:

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
微视扫码读写IE浏览器皮肤模块JSONXUI置入代码多关键词筛选百度登录ETCP多线程PING微信Hook标签浏览器EXCEL导入导出皮肤制作枚举类函数百度网盘QQ资料照片墙上传RawSocket鱼刺HTTP获取登陆QQ
最新评论