Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从客户端/服务器发送文件-套接字pgm Python 3_Python_Python 3.x_Sockets - Fatal编程技术网

无法从客户端/服务器发送文件-套接字pgm Python 3

无法从客户端/服务器发送文件-套接字pgm Python 3,python,python-3.x,sockets,Python,Python 3.x,Sockets,我正试图从客户端向服务器发送一个txt文件 client.py import socket TCP_IP = '127.0.0.1' TCP_PORT = 8340 BUFFER_SIZE = 1024 server_addr = (TCP_IP, TCP_PORT) c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) c.connect(server_addr) file = open(r"C:\Users\sakthi\Desk

我正试图从客户端向服务器发送一个txt文件

client.py

import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 8340
BUFFER_SIZE = 1024

server_addr = (TCP_IP, TCP_PORT)

c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect(server_addr)

file = open(r"C:\Users\sakthi\Desktop\Hi.txt",'r')

transfer = file.read(BUFFER_SIZE)

while transfer:
    c.send(transfer.encode())
    transfer = file.read(1024)

print (s.recv(BUFFER_SIZE).decode())

c.close()
Server.py

import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 8340
BUFFER_SIZE = 1024  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((TCP_IP, TCP_PORT))

s.listen(1)
conn, addr = s.accept()

final = open(r"C:\Users\sakthi\Desktop\final.txt", 'a+')

while 1:
    print('Connection address:', addr)
    r = conn.recv(BUFFER_SIZE).decode()
    if not r:break
    final.write(r)
    print("received data:", r)

k="file received"

conn.send(k.encode())

conn.close()
一旦收到文件,服务器将向客户端发送消息“文件已接收”。 客户端将打印消息“文件已接收”并关闭连接

当我运行代码时,server.py不会出现在while循环中

while 1:
    print('Connection address:', addr)
    r = conn.recv(BUFFER_SIZE).decode()
    if not r:break
    final.write(r)
    print("received data:", r)
r=conn.recv(BUFFER_SIZE).decode()
继续侦听新消息,但客户端已传输所有消息

文件大小为
1.14 KB

有人能告诉我我的程序出了什么问题吗?

我找到了解决办法

请注意,我们的语句是recv()阻塞,直到有数据可读取或发送方已关闭为止。只有在套接字处于阻塞模式时,连接才会保持。该模式是默认模式,但我们可以通过使用参数0调用setblocking()将套接字更改为非阻塞模式

我已经修改了server.py

import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 8340
BUFFER_SIZE = 1024  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((TCP_IP, TCP_PORT))

s.listen(1)
conn, addr = s.accept()

conn.setblocking(0)

final = open(r"C:\Users\sakthi\Desktop\final.txt", 'a+')

while 1:
    try:
        print('Connection address:', addr)
        r = conn.recv(BUFFER_SIZE).decode()
        final.write(r)
        print("received data:", r)
    except:
        break

k="file received"

conn.send(k.encode())

conn.close()
现在我可以接收文件并向客户端发送消息“file received”,连接关闭

我正在使用“如果不是r:break”退出循环。因此,如果接收到空数据,它将中断while循环