python: socket

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""
网络发送信息
 
"""
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()

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""
 
"""
 
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()

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""
服务器端
"""
 
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()

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
"""
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}")

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""
 
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 @   ®Geovin Du Dream Park™  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
历史上的今天:
2015-07-23 csharp: 用Enterprise Library对象实体绑定数据
2013-07-23 -ms-zoom property
2013-07-23 jQuery:mouseover and Increase the Size of an Image
2011-07-23 SQL script 會計記賬 Debit-Credit Bookkeeping
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示