Swift Network.framework Study 2019 1208 "Send and Receive"

Study

Network.framework Study:Send and Receive

environment

Client:Swift、Xcode Server:Java、NetBeans

Client Source Swift

main.swift

import Foundation
import Network

var sendAndReceive = SendAndReceive(host: "localhost", port: 7777, nWParameters: .tcp)

sendAndReceive.startConnection()

while sendAndReceive.running {
    sleep(1)
}

SendAndReceive.swift

import Foundation
import Network

class SendAndReceive {
    public var running = true
    private var host:NWEndpoint.Host
    private var port:NWEndpoint.Port
    private var nWParameters: NWParameters
    
    init(host:NWEndpoint.Host, port:NWEndpoint.Port, nWParameters: NWParameters) {
        self.host = host
        self.port = port
        self.nWParameters = nWParameters
    }

    func startConnection() {
        let myQueue = DispatchQueue(label: "ExampleNetwork")
        let connection = NWConnection(host: host, port: port, using: nWParameters)
        connection.stateUpdateHandler = { (newState) in
            switch(newState) {
            case .ready:
                print("ready")
                self.sendMessage(connection)
            case .waiting(let error):
                print("waiting")
                print(error)
            case .failed(let error):
                print("failed")
                print(error)
            default:
                print("defaults")
                break
            }
        }
        connection.start(queue: myQueue)
        self.receive(nWConnection: connection)
    }

    func sendMessage(_ connection: NWConnection) {
        let data = "Example Send Data".data(using: .utf8)
        let completion = NWConnection.SendCompletion.contentProcessed { (error: NWError?) in
            print("send completely")
        }
        connection.send(content: data, completion: completion)
    }

    func receive(nWConnection:NWConnection) {
        nWConnection.receive(minimumIncompleteLength: 1, maximumLength: 5, completion: { (data, context, flag, error) in
            print("receiveMessage")
            if let data = data {
                let receiveData = [UInt8](data)
                print(receiveData)
                print(flag)
                if(flag == false) {
                    self.receive(nWConnection: nWConnection)
                }
            }
            else {
                print("receiveMessage data nil")
            }
        })
    }

}

Server Source Java

package example.java.network;

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

public class ExampleReceiveAndSend {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(7777);
            System.out.println("socket create");
            Socket socket = serverSocket.accept();
            System.out.println("accept");
            byte[] data = new byte[1024];
            int dataSize = socket.getInputStream().read(data);
            System.out.println(data);
            PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
            printWriter.println("Example Return Data");
            
            System.out.println("end");            
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
    
}

Recommended Posts

Swift Network.framework Study 2019 1208 "Send and Receive"
Swift Network.framework Study 20200319 "Receive and Send"
Swift Network.framework Study 20191203
Swift Network.framework Study 2019 1204 "UDP"
Swift Network.framework Study 2019 1210 "Bonjour Browse"
Swift Network.framework Study 2019 1207 "Server UDP"
Swift Network.framework Study 2019 1205 "Server TCP"
Swift Network.framework Study 2019 1206 "Server TCP" Part 2 Use receive method
Swift Network.framework Study 2019 1207 "Server TCP" Part 3 Use of receive method Improvement
Connect with port forwarding with SSH and send and receive files
[Swift] Constants and variables
Create API to send and receive Json data in Spring
Study Java # 2 (\ mark and operator)
Use swift Filter and Map