Swift Network.framework Study 20191204「UDP」
Study
Network.framework
Study:Client側
環境
Client:Swift、Xcode
Server:Java、NetBeans
Client Source Swift
SwiftはNWConnectionに「NWParameters.udp」を設定するだけ。
import Foundation import Network var running = true func startConnection() { let myQueue = DispatchQueue(label: "ExampleNetwork") let connection = NWConnection(host: "localhost", port: 7777, using: NWParameters.udp) connection.stateUpdateHandler = { (newState) in switch(newState) { case .ready: print("ready") 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) } func sendMessage(_ connection: NWConnection) { let data = "Example Send Data".data(using: .utf8) let completion = NWConnection.SendCompletion.contentProcessed { (error: NWError?) in print("送信完了") running = false } connection.send(content: data, completion: completion) } startConnection() //dispatchMain() while running { sleep(1) }
Server Source Java
JavaはTCPとUPDで使用するクラスが違う。
package example.java.network; import java.net.DatagramPacket; import java.net.DatagramSocket; public class ExampleServerUDP { private static final int EXHOMAX = 255; public static void main(String[] args) { try { DatagramSocket datagramSocket = new DatagramSocket(7777); DatagramPacket datagramPacket = new DatagramPacket(new byte[EXHOMAX], EXHOMAX); while(true) { datagramSocket.receive(datagramPacket); for(int i = 0; i < datagramPacket.getLength(); i++) { System.out.print(datagramPacket.getData()[i]); System.out.print(" "); } System.out.println(); datagramPacket.setLength(EXHOMAX); } } catch(Exception e) { } } }