TCP服务器代码如下:
from socket import *
def client_upload(client_socket):
"""上传数据"""
file_name = client_socket.recv(1024).decode('utf-8')
print("客户端要上传的文件名为: %s" % file_name)
file_content = client_socket.recv(1024)
if file_content:
try:
with open(file_name, 'wb')as f:
f.write(file_content)
print("文件上传完成!")
except Exception:
print("文件已经存在!")
else:
print("客户端上传失败!")
def client_download(client_socket):
"""客户端下载数据"""
file_name = client_socket.recv(1024).decode('utf-8')
print("客户端要下载的文件名为: %s" % file_name)
try:
f = open(file_name, 'rb')
except Exception:
print("服务器没有此文件")
else:
file_content = f.read(1024)
client_socket.send(file_content)
print("文件已经发送个客户端")
def main():
"""tcp服务器主程序"""
tcp_socket = socket(AF_INET, SOCK_STREAM)
tcp_socket.bind(('', 8080))
tcp_socket.listen(128)
while True:
print("等待新客户端连接")
client_socket, client_addr = tcp_socket.accept()
print("%s 已连接" % str(client_addr))
while True:
client_chioce = client_socket.recv(1024).decode('utf-8')
print(client_chioce)
if client_chioce == "1":
# 客户端将向服务器上传数据
print("客户端准备上传数据...")
client_upload(client_socket)
elif client_chioce == "2":
# 客户端将从服务下载数据
print("客户端准备下载数据...")
client_download(client_socket)
elif client_chioce == '3':
# 客户端断开连接
print("客户端准备断开连接...")
client_socket.close()
break
else:
# print("客户端发送了其他...")
pass
if __name__ == '__main__':
main()
TCP客户端代码:
from socket import *
import time
def client_sub(client_socket):
"""用户选择操作函数"""
print("**" * 20)
print("1:上传数据")
print("2:下载数据")
print("3:断开连接")
client_pro = input("请选择你要的操作:")
if client_pro == "1":
client_socket.send(client_pro.encode('utf-8'))
# 向服务器上传数据功能
print("准备向服务器上传数据")
send_file(client_socket)
elif client_pro == "2":
client_socket.send(client_pro.encode('utf-8'))
# 从服务器下载数据
print("准备从服务器下载数据")
download_file(client_socket)
elif client_pro == "3":
client_socket.send(client_pro.encode('utf-8'))
# 断开链接
print("准备断开链接")
client_socket.send("3".encode('utf-8'))
client_socket.close()
return "1"
else:
print("您输入的选项有误,请从新输入")
client_sub(client_socket)
def send_file(client_socket):
"""客户端上传文件"""
file_name = input("请输入您要上传的文件名")
client_socket.send(file_name.encode("utf-8"))
try:
f = open(file_name,'rb')
except Exception:
print('没有此文件!')
else:
file_content = f.read(1024)
f.close()
client_socket.send(file_content)
time.sleep(1)
print("文件上传成功!")
time.sleep(1)
def download_file(client_socket):
"""文件下载"""
file_name = input("请输入您要下载的文件名")
client_socket.send(file_name.encode("utf-8"))
file_content = client_socket.recv(1024)
if file_content:
try:
with open(file_name,'wb')as f:
f.write(file_content)
time.sleep(1)
print("文件下载完成")
time.sleep(1)
except Exception:
print("文件下载失败")
else:
print("服务器没有此文件")
def main():
"""tcp客户端主程序"""
client_socket = socket(AF_INET,SOCK_STREAM)
server_ip = input("请输入服务器IP:")
server_port = int(input("请输入服务器的port:"))
client_socket.connect((server_ip,server_port))
print("连接服务器成功!")
while True:
pro = client_sub(client_socket)
if pro == "1":
break
if __name__ == '__main__':
main()