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)

  

 

posted @ 2023-07-23 11:27  ®Geovin Du Dream Park™  阅读(24)  评论(0)    收藏  举报