python: socket
"""
网络发送信息
"""
import socket
import threading
def handlesend(tcpclient):
"""
发送
:return:
"""
while True:
message = input()
tcpclient.send(message.encode())
def handlerecv(tcpclient):
"""
接收
:return:
"""
recvdata = tcpclient.recv(1024)
print(recvdata.decode())
# 中文
# print(recvdata.decode('gbk'))
def send():
#TCP 客户端
#1 创建TCP socket 对象
# socket.AF_INET ip4
# socket.SOCK_STREAM TCP 协议
# socket.DGRAM upd 协议
tcpclient=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2 链接TCP 服务端 ip地址, port 端口
tcpclient.connect('172.16.1.106',6666)
t1=threading.Thread(target=handlesend,args=(tcpclient,))
t1.start()
t2=threading.Thread(target=handlerecv,args=(tcpclient,))
t2.start()
'''
#3 发送信息
while True:
message=input()
tcpclient.send(message.encode())
#中文
#tcpclient.send(message.encode('gbk'))
#4 接收信息 用多线程来解决卡顿
recvdata=tcpclient.recv(1024)
print(recvdata.decode())
#中文
#print(recvdata.decode('gbk'))
'''
#5 关闭 socket
tcpclient.close()
"""
"""
import socket
import threading
def servertcp():
# Tcp 服务端
# 1 创建tcp sockect
tcpserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2 绑定端口号
tcpserver.bind('', 6667)
# 3 监听端户端最大个数
tcpserver.listen(80)
print("服务器启动")
# 4 等待接收客户端
while True:
#acceptdata=tcpserver.accept()
newclient,ipoort= tcpserver.accept()
print(ipoort,'链接近来了')
# 5 发送数据
newclient.send('连我干吗?'.encode('gbk'))
# 6 接收数据
recvdata=newclient.recv(1024)
print('接收到信息',recvdata.decode('gbk'))
newclient.close()
# 7 关闭 socket
tcpserver.close()
"""
服务器端
"""
import socket
import threading
def handlecliend(newclient):
"""
:param newclient:
:return:
"""
# 5 发送数据
newclient.send('连我干吗?'.encode('gbk'))
# 6 接收数据
recvdata = newclient.recv(1024)
print('接收到信息', recvdata.decode('gbk'))
newclient.close()
def servertcp():
# Tcp 服务端
# 1 创建tcp sockect
tcpserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2 绑定端口号
tcpserver.bind('', 6667)
# 3 监听端户端最大个数
tcpserver.listen(80)
print("服务器启动")
# 4 等待接收客户端 改成多线程
while True:
#acceptdata=tcpserver.accept()
newclient,ipoort= tcpserver.accept()
print(ipoort,'链接近来了')
'''
# 5 发送数据
newclient.send('连我干吗?'.encode('gbk'))
# 6 接收数据
recvdata=newclient.recv(1024)
print('接收到信息',recvdata.decode('gbk'))
newclient.close()
'''
t=threading.Thread(target=handlecliend,args=(newclient,))
t.start()
# 7 关闭 socket
tcpserver.close()
"""
ClienSendFile.py
https://github.com/justEhmadSaeed/Python-Sockets-File-Transfer
https://codereview.stackexchange.com/questions/197462/large-file-transmission-over-socket-in-python
https://www.pybloggers.com/2014/06/python-and-sendfile/
https://github.com/giampaolo/pysendfile
"""
import socket
import os
import threading
HOST = "127.0.0.1" # The server's hostname or IP address localhost
PORT = 8000 # The port used by the server
def handlesendtofile(tcpclient:socket.socket,path:str,filename:str):
"""
:param tcpclient:
:param path:
:param filename:
:return:
"""
tcpclient.send(filename.encode('gbk')) #发送文件名
with open(path,'rb') as fp:
while True:
data=fp.read(1024)
tcpclient.send(data)
if not data:
break
tcpclient.close()
def sendfile():
# Tcp 服务端
# 1 创建tcp sockect
#2 链接TCP 服务端 ip地址, port 端口
#tcpclient.connect('172.16.1.106',6667)
# 4 等待接收客户端 改成多线程
while True:
filename=input("请输入文件名:")
path=rf'client_dir\{filename}'
if not os.path.exists(path):
print("你输入的文件名不存在")
continue
try:
tcpclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpclient.connect('172.16.1.106', 6667)
t=threading.Thread(target=handlesendtofile,args=(tcpclient,path,'来自于客户端'+filename))
t.start()
except Exception as ex:
print(ex)
print('发送完成!')
tcpclient.close()
def send():
"""
:return:
"""
file = open('doc.txt', 'rb')
data = file.read(1024)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as ss:
while data:
ss.send(data)
data = file.read(1024)
if not data:
break
file.close()
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b"Hello, world")
data = s.recv(1024)
print(f"Received {data!r}")
"""
ServerReceFile.py
"""
import socket
import os
import threading
#import tqdm
HOST = "127.0.0.1" # The server's hostname or IP address
PORT = 8000 # The port used by the server
SEPARATOR = "<SEPARATOR>"
BUFFER_SIZE = 4096 # send 4096 bytes each time step
def handleReceFile(newclient:socket.socket):
recvdata=newclient.recv(1024)
filename=recvdata.decode('gbk')
path=fr'server_dir\{filename}'
with open(path,'wb') as fp:
while True:
data=newclient.recv(1024)
fp.write(recvdata)
if not recvdata:
break
print('接收完成')
newclient.close()
def ReceFile():
tcpserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2 绑定端口号
tcpserver.bind('', 6667)
# 3 监听端户端最大个数
tcpserver.listen(80)
print("服务器启动")
# 4 等待接收客户端
while True:
# acceptdata=tcpserver.accept()
newclient, ipoort = tcpserver.accept()
t=threading.Thread(target=handleReceFile,args={newclient,})
t.start()
def Rece():
"""
:return:
"""
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号