java & swift socket communication(tcp 소켓통신)
자바와 스위프트 간에 소켓통신하기
server = Java
client = swift
1. swift 3 socket communication code
아래의 사이트에서 참고했습니다.
1. cocoapod 설치
이미 cocoapod를 설치했다면 이 단계를 생략합니다.
gem install cocoapods2. Podfile 생성
터미널에서 프로젝트 폴더로 간 후 아래 코드를 입력합니다.
참고로 프로젝트.xcodproj 파일이 있는 곳입니다.
pod init그러면 Podfile이 생성됩니다.
3. Podfile 수정
Podfile을 엽니다.
open Podfile#Pods for __프로젝트 이름__ 밑에 아래 코드를 추가한다.
pod ‘SwiftSocket’저장한 후 닫습니다.
4. pod install
터미널에 아래 코드를 입력합니다.
pod install
options는 무시하세요…(잘못쳐서…)
이렇게 나오면 성공입니다.
저기 블록친 내용처럼 이제부터는 프로젝트이름.xcworkspace 를 사용해야합니다.
5. xcode에 코드 입력.
맨 위에 언급했던 것과 같은 곳입니다.
프로젝트를 생성하고 ViewController에 위의 사이트에 있는 코드를 입력합니다. (위의 링크는 아래에 적은 것과 같은 코드이지만 위의 링크를 참고하시는 걸 추천합니다. 아래에 적은 것은 띄어쓰기가 잘 안되어있어서..)
import UIKitimport SwiftSocketclass ViewController: UIViewController {@IBOutlet weak var textView: UITextView!let host = "127.0.0.1"let port = 9999var client: TCPClient?override func viewDidLoad() {super.viewDidLoad()client = TCPClient(address: host, port: Int32(port))}@IBAction func sendButtonAction(_ sender: Any) {guard let client = client else { return }switch client.connect(timeout: 10) {case .success:appendToTextField(string: "Connected to host \(client.address)")if let response = sendRequest(string: "GET / HTTP/1.0\n\n", using: client) {appendToTextField(string: "Response: \(response)")}case .failure(let error):appendToTextField(string: String(describing: error))}}private func sendRequest(string: String, using client: TCPClient) -> String? {appendToTextField(string: "Sending data ... ")switch client.send(string: string) {case .success:return readResponse(from: client)case .failure(let error):appendToTextField(string: String(describing: error))return nil}}private func readResponse(from client: TCPClient) -> String? {guard let response = client.read(1024*10) else { return nil }return String(bytes: response, encoding: .utf8)}private func appendToTextField(string: String) {print(string)textView.text = textView.text.appending("\n\(string)")}}
5–1 같은 기기에서의 소켓통신
위의 코드처럼 이 주소를 사용합니다. 코드를 변경할 필요 없이 그대로 사용하시면 됩니다.
let host = "127.0.0.1"5–2 다른 기기 간의 소켓통신
먼저 다른 기기와 소켓통신을 하기 위해서는 같은 네트워크에 연결되어있어야합니다.
Server역할을 하는 기기(제 기준 라즈베리파이)의 터미널에서 아래 코드를 입력합니다.
ifconfig
위 사진에서 블럭친 곳에 해당하는 주소를 5번 코드의 host 값에 입력합니다.
제 주소는 위와 같으므로 입력하면 아래와 같습니다.
let host = "192.168.0.4"2. JAVA socket communication code
아래의 블로그를 참고하시면 됩니다.
저는 자바(라즈베리파이)에서 데이터를 스위프트로 넘겨주는 프로젝트를 했기 때문에 아래 블로그에서 Server 코드만을 이용했습니다.
3. 결과
먼저 Server(Java)를 Run 한 뒤 Client(Swift)를 빌드합니다.
그리고 시뮬레이터의 버튼을 누릅니다.
결과.

시뮬레이터에서 hello world를 받았습니다.
