Kürzlich habe ich einen reinen Swift-Socket-Server und Client namens IBM BlueSocket gefunden.
Es ist für mich geeignet, dass es Server-cleart-Kommunikation macht. Es hat eine ziemlich einfache Probe. aber ich stieß auf einige Probleme.
1. Wie führe ich es in einer Run-Schleife einer GUI-Anwendung aus?
2. Wie man es laufen lässt und multi Verbindungen stützt?Wie IBM BlueSocket in einer GUI-Anwendung ausgeführt werden und mehrere Verbindungen unterstützen kann
0
A
Antwort
1
Das Beispiel wurde kürzlich aktualisiert und zeigt die Verwendung der GCD-basierten Dispatch-API für Multithreading und die Unterstützung mehrerer Verbindungen. Es sollte Ihnen auch eine Idee geben, wie es in der Hauptwarteschlange ausgeführt wird (was für eine GUI oder eine Serveranwendung funktioniert).
1
Für was es wert ist, präsentiere ich die einfachste Chat-Client der Welt.
import Foundation
import Socket
// Very simplified chat client for BlueSocket - no UI, it just connects to the echo server,
// exchanges a couple of messages and then disconnects.
// You can run two instances of Xcode on your Mac, with the BlueSocketEchoServer running in one and
// this program running in the other. It has been tested running in the iPhone simulator, i.e.,
// under iOS, without problems.
// License: Public domain.
public class BlueSocketChatClient {
public func runClient() {
do {
let chatSocket = try Socket.create(family: .inet6)
try chatSocket.connect(to: "127.0.0.1", port: 1337)
print("Connected to: \(chatSocket.remoteHostname) on port \(chatSocket.remotePort)")
try readFromServer(chatSocket)
try chatSocket.write(from: "Hello to you too!")
try readFromServer(chatSocket)
try chatSocket.write(from: "Bye now!\n")
try chatSocket.write(from: "QUIT")
sleep(1) // Be nice to the server
chatSocket.close()
}
catch {
guard let socketError = error as? Socket.Error else {
print("Unexpected error ...")
return
}
print("Error reported:\n \(socketError.description)")
}
}
// This is very simple-minded. It blocks until there is input, and it then assumes that all the
// relevant input has been read in one go.
func readFromServer(_ chatSocket : Socket) throws {
var readData = Data(capacity: chatSocket.readBufferSize)
let bytesRead = try chatSocket.read(into: &readData)
guard bytesRead > 0 else {
print("Zero bytes read.")
return
}
guard let response = String(data: readData, encoding: .utf8) else {
print("Error decoding response ...")
return
}
print(response)
}
}
Bill Abt: Wenn Sie dies in irgendeiner Weise verwenden können, sind Sie herzlich willkommen.
An Bill Abt: Vielen Dank für Ihre großartige und einfache Probe. – CocoaUser
Siehe unten ein einfaches Chat-Client-Programm, das ich als "Proof of Concept" verwendet habe, um sicherzustellen, dass BlueSocket unter iOS korrekt ausgeführt wird und um ein Gefühl dafür zu bekommen, wie man damit kommuniziert. – RenniePet