java & swift socket communication(tcp 소켓통신)

자바와 스위프트 간에 소켓통신하기

server = Java

client = swift

1. swift 3 socket communication code

아래의 사이트에서 참고했습니다.

1. cocoapod 설치

이미 cocoapod를 설치했다면 이 단계를 생략합니다.

gem install cocoapods

2. 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 UIKit
import SwiftSocket
class ViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
let host = "127.0.0.1"
let port = 9999
var 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를 받았습니다.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.