728x90
이 포스팅은 앞서 작성한 라즈베리파이 Qt가 서버이고 어플이 클라이언트로 구성되어 있습니다.
https://1d1cblog.tistory.com/39
먼저 AndroidManifest.xml에 아래 코드를 추가해줍니다.
<uses-permission android:name="android.permission.INTERNET" />
그 후 액티비티에 InputStream과 OutputStream, Socket을 선언해줍니다. 그리고 서버 ip, port를 설정합니다.
여기서 Thread를 사용하는 이유는 반응하지 않는 UI가 생성되는 것을 방지하려면 UI 스레드에서 네트워크 작업을 수행해서는 안 됩니다. 기본적으로 Android 3.0(API 레벨 11) 이상에서는 기본 UI 스레드를 제외한 스레드에서 네트워크 작업을 수행해야 합니다. 그렇지 않으면 NetworkOnMainThreadException이 발생합니다.
public class MainActivity extends AppCompatActivity {
final String TAG = "TAG+MainActivity";
public InputStream dataInputStream;
public OutputStream dataOutputStream;
private Socket socket;
private String ip = "121.153.150.157";
private int port = 9999;
Thread thread;
ImageButton lightButton;
...
}
수신하는 쓰레드입니다.
thread = new Thread(new Runnable() {
@Override
public void run() {
try{
socket = new Socket(ip,port);
dataInputStream = socket.getInputStream();
dataOutputStream = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
byte[] buffer = new byte[1024];
int bytes;
Log.d(TAG, "수신 시작");
while(true) {
try {
Log.d(TAG, "수신 대기");
bytes = dataInputStream.read(buffer);
Log.d(TAG, "byte = " + bytes);
String tmp = new String(buffer, 0, bytes);
Log.d(TAG,tmp);
...
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
thread.start();
다음으로 송신부분입니다. turnOn()이라는 함수 안에 write함수가 있습니다.
public void turnOn() throws IOException {
byte[] inst = "On".getBytes();
dataOutputStream.write(inst);
}
turnOn()함수를 별도의 쓰레드를 생성해서 사용해줬습니다.
lightButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
new Thread(new Runnable() {
@Override
public void run() {
try {
turnOn();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
728x90
'Programming > Android' 카테고리의 다른 글
안드로이드 스튜디오 Swipe Button 사용하기 (0) | 2019.11.28 |
---|---|
안드로이드 스튜디오 Nofication 클릭하여 실행중인 어플 불러오기 (0) | 2019.11.25 |
안드로이드 스튜디오 TimePickerDialog 사용하기 (0) | 2019.11.21 |
안드로이드 스튜디오 투명도 넣기 (0) | 2019.09.29 |
Fragment의 생명주기 (0) | 2019.09.23 |