Swift Network.framework Study 20191206「Server TCP」その2 receiveメソッド使用

Study

Network.framework
Study:Server側

環境

Client:Java、NetBeans
Server:Swift、Xcode

Client Source Java

package example.java.network;

import java.io.PrintWriter;
import java.net.Socket;

public class ExampleClientSocket {
    public static void main(String[] args) {
        try(Socket socket = new Socket("localhost", 7777);
            PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);) {
            printWriter.println("Example Send Data");
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
}

Server Source Swift

NWListerを使用する
コネクション確立後のNWConnectionに受信処理登録、開始実施
受信バイト数指定出来るreceiveメソッド使用。
受信したデータ1回分から、maximumLength数分取得しました。
下記の例だと5バイト。
5バイト以上を送信したとしても、6バイト目以降を連続して受信がコールされるわけではない様です。
続きを取れるかは調査中。

main.swift

import Foundation
import Network

var networkServer = NetworkServer()

networkServer.startListener()

while networkServer.running {
    sleep(1)
}

NetworkServer.swift

import Foundation
import Network

class NetworkServer {
    public var running = true

    func startListener() {
        let myQueue = DispatchQueue(label: "ExampleNetwork")

        do {
            let nWListener = try NWListener(using: .tcp, on: 7777)
            nWListener.newConnectionHandler = { (newConnection) in
                print("New Connection!!")
                newConnection.receive(minimumIncompleteLength: 1, maximumLength: 5, completion: { (data, context, flag, error) in
                    print("receiveMessage")
                    let receiveData = [UInt8](data!)
                    print(receiveData)
                })
                newConnection.start(queue: myQueue)
            }
            nWListener.start(queue: myQueue)
            print("start")
        }
        catch {
            print(error)
        }
    }
}

Swift

Posted by shi-n