2016-07-29 10 views
0

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

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).

+0

An Bill Abt: Vielen Dank für Ihre großartige und einfache Probe. – CocoaUser

+0

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

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.