tcp服务器
import socket
1. 建立套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2为了防止服务器不能立马重新使用相应的端口 设置套接字地址重用选项
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定端口
server_socket.bind(("", 8080))
# 监听服务器人数
server_socket.listen(128)
while True:
# 从服务器去一客户
client_socket, client_address = server_socket.accept()
受到%s链接" % str(client_address))
#客服使用分级交流
data = client_socket.recv(4096)
if data:
消息%s" % data.decode())
client_socket.send(data)
else:
断开链接")
client_socket.close()
tcp客户端
import socket
# 创建一个套接字 网络地址协议族IPv4 流式报文
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2建立和远程服务器的连接 参数是 服务器的IP地址和端口构成的元组
tcp_socket.connect(('192.168.90.108', 8080))
# 3 进行交流(说听)
data = input("请输入你想说的:")
#发送数据()
tcp_socket.send(data.encode())
# recv接收数据 参数就是本次接收数据的最大长度
recv_data = tcp_socket.recv(4096)
返回值就是 接收到的decode
print("接收到数据%s" % recv_data.decode())
# 4断开连接 释放套接字资源
tcp_socket.close()
tcp文件下载服务器
import socket
def read_file_data(file_name):
try:
file = open(file_name, "rb")
except Exception as e:
print("文件不存在")
else:
file_data = file.read()
return file_data
# 建立服务器套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定ip 端口server_socket.bind(("", 8888))
# 监听对象server_socket.listen(128)
while True:
# 服务器获取一个客户
client_socket, client_address = server_socket.accpet()
print("收到%s链接" % str(client_address))
# 接受文件 提取文件
file_name = client_socket.recv(4096)
# 根据文件名取文件数据
data = read_file_data(file_name)
if data:
client_socket.send(data)
client_socket.close()
server_socket.close()
tcp文件下载客户端
import socket
import os
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 创建服务器链接
id = input("输入链接id号")
port = input("输入端口号")
tcp_socket.connect((id, port))
# 下载文件名字
file_name = input("下载文件名字")
# 发送下载文件名字
tcp_socket.send(file_name.encode())
# 循环接受文件数据 保存本地
file = open("new" +file_name, "wb")
had_write_len = 0
while True:
接受文件
data = tcp_socket.recv(4096)
if data:
file.write(data)
had_write_len += len(data)
else:
file.close()
tcp_socket.close()
if had_write_len > 0:
文件传输完成")
else:
删除空文件
os.remove("new" + file_name)
文件不存在")
break