簡體   English   中英

BlueSocket說連接到Python Socket套接字時拒絕連接

[英]BlueSocket saying Connection Refused when connecting to Python Socket Socket

對於我正在制作的iOS應用,它需要連接到python套接字服務器。 對於iOS應用程序,我正在使用Swift 3,而我正在使用BlueSocket當我嘗試使用正確的IP和端口連接到服務器時,它始終返回Connection Refused,並且在服務器上看不到連接。 BlueSocket設置為TCP客戶端,而python服務器也是TCP服務器,因此我對其為何不起作用感到困惑。

有誰知道/理解為什么它無法連接到服務器?

iOS的快速代碼是這樣的:

import UIKit
import Foundation
import SystemConfiguration
import SystemConfiguration.CaptiveNetwork
import Socket

let ssid = "SSID"
let server = "192.168.0.24"
let port = 8000

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBOutlet weak var ideaLabel: UILabel!

@IBAction func generateButton(_ sender: Any) {

    func isInternetAvailable() -> Bool
    {
        var zeroAddress = sockaddr_in()
        zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
        zeroAddress.sin_family = sa_family_t(AF_INET)

        let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
            $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
                SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
            }
        }

        var flags = SCNetworkReachabilityFlags()
        if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
            return false
        }
        let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
        let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
        return (isReachable && !needsConnection)
    }
    func getSSID() -> String? {
        var ssid: String?
        if let interfaces = CNCopySupportedInterfaces() as NSArray? {
            for interface in interfaces {
                if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {
                    ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
                    break
                }
            }
        }
        return ssid
    }
    func generateIdea() -> String? {
        let RNumber = arc4random_uniform(23)


        var idea = ""

        //(A bunch of code to get a idea for offline mode)

        return String(idea)
    }



    let InternetConnect = isInternetAvailable()


    if (InternetConnect == isInternetAvailable()){
        print("Internet Connection Verified")
        if (getSSID() == ssid){
            print("SSID Verified")

            let s = try! Socket.create()
            try! s.connect(to: server, port: 8000)
            print("Connceted to server")

            try! s.write(from: "01")
            print("String send")

            let idea = try! s.readString()
            print("Idea Received")
            ideaLabel.text = idea

            s.close()
        }
        else{

            print("SSID Verification Failed")
            ideaLabel.text = generateIdea()
        }

    }
    else {

        ideaLabel.text = generateIdea()
        print("Internet Connection Verification Failed")

    }
}

}

快速客戶端說明:

單擊按鈕生成想法時,該應用程序首先檢查是否可以連接到互聯網,是否可以通過檢查SSID來檢查它是否在設置的互聯網上(服務器將局域網服務器,因此它只能在設置的網絡上工作)如果它無法連接到互聯網或不在正確的網絡上,則從存儲在應用程序中的有限創意中選擇一個。 如果它可以連接到Internet及其在正確的Internet網絡上,則它將嘗試連接到服務器並從服務器中獲取想法。

python套接字服務器代碼:

import socket
import sqlite3
from random import randint

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 8000)
print("Starting Server")
s.bind(server_address)
print("Waiting for client")
s.listen(1)
alive = True

while(alive == True):
    connection, client_address = s.accept()
    print(client_address)

    try:
        command = connection.recv(2)

        if (command == "01"):
            conn = sqlite3.connect('ideas.db')
            c = conn.cursor()
            file = open("maxID.txt", "r")
            maxID = (int(file.read()) + 1)
            ideaNumber = (randint(1,maxID),)
            c.execute('SELECT * FROM ideas WHERE id=?', ideaNumber)
            idea1 = c.fetchone()
            idea = str(idea1)
            conn.close()
            idea = idea.translate(None, "1234567890'(),u")
            print("Your idea is:")
            print(idea)
            connection.send(str(idea))

    finally:
        connection.close()

python套接字服務器的說明:

當服務器獲取客戶端時,它將等待獲取命令。 在此服務器中,只有一個命令可以幫助您了解。 該命令為“ 01”。 當它獲得該命令時,它要做的第一件事就是獲得存儲在數據庫中的想法數量。 那將被寫入maxID.txt文件,因此它會讀取它。 然后隨機選擇一個隨機的想法ID,然后使用ID從數據庫中獲取該想法。 然后,它將這個想法發送給客戶。

問題出在python服務器上。 問題是我將主機設置為localhost,而不是將其保留為空白。

這個:

server_address = ('localhost', 8000)

應該是:

server_address = ('', 8000)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM