python-如何使用socket将文件发送到不同的网络

时间:2018-03-24 03:18:13

标签: python sockets network-programming

早上的sensei,即时通讯使用socket学习网络编程。我能够使用公共IP将文件从笔记本电脑传输到我的智能手机。但是,如果我试图将其转移到不同网络中的其他手机,它不起作用,手机无法连接。 这是我的server.py:

import sys
import socket
import os

host = ''
skServer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
skServer.bind((host,2525))
skServer.listen(10)
print ("Server Active")
bFileFound = 0

while True:
    Content,Address = skServer.accept()
    print (Address, "connected")
    FileName = Content.recv(8192)
    sFileName = FileName.decode('utf-8')

    for file in os.listdir("files/"):
        if file == sFileName:
            bFileFound = 1
            break

    if bFileFound == 0:
        print (sFileName+" Not Found On Server")


    else:
        print (sFileName," File Found")
        fUploadFile = open("files/"+sFileName,"rb+")
        sRead = fUploadFile.read(8192)
        while sRead:
            Content.sendall(sRead)
            sRead = fUploadFile.read(8192)
        print ("Sending Completed")


Content.close()
skServer.close()

这是我的client.py:

import sys
import socket 

skClient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skClient.connect(("<ip public>",2525))

sFileName = input("Enter Filename to download from server : ")
sData = "Temp"

while True:
    skClient.sendall(sFileName.encode('utf-8'))
    sData = skClient.recv(8192)
    fDownloadFile = open("storage/emulated/0/qpython"+sFileName,"wb+")
    while sData:
        fDownloadFile.write(sData)
        sData = skClient.recv(8192)
    print ("Download Completed")

skClient.close()

有什么方法可以全局使用我的脚本,所以任何网络都可以访问它吗?

1 个答案:

答案 0 :(得分:0)

可能。某些提供商限制某些类型的网络流量。

您有几种选择,其中一种方法是为两个设备提供通用的VPN连接。该技术将封装您的程序流量,因此程序应该按照您希望的方式工作。