[英]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.