SPRING :: NOTE
[ANDROID] 소켓통신(Socket) 쓰레드 클래스 구현 및 사용방법 본문
Development Language/JAVA · ANDROID
[ANDROID] 소켓통신(Socket) 쓰레드 클래스 구현 및 사용방법
RAYZIE 2019. 1. 15. 19:37반응형
예전에 안드로이드를 하긴 했지만..
시간이 너무 오래 지나서 안드로이드도 다 까먹고, 워낙 바뀐게 많다 보니 애를 많이먹었다.
안드로이드 API 몇버전이더라...
이제 소켓통신을 할 때 쓰레드를 생성해서 통신하는것 아니면 에러가 난다고 해서 몸소 겪었다.
하루종일...
그래서... 인터넷에서 찾은 js 소켓 통신으로 SendMessage에 Thread만 추가하여 클래스를 만들었다.
아래는 원본 링크다. 설명이 잘 되어있으니 한번 방문하는것도 좋을듯.
클래스를 구현하고 Activity에서 new 해주면 된다.
TcpClient.java
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
public class TcpClient {
private Socket socket;
private OutputStream socketOutput;
private BufferedReader socketInput;
private String ip;
private int port;
private ClientCallback listener=null;
public TcpClient(String ip, int port){
this.ip=ip;
this.port=port;
}
public void connect(){
new Thread(new Runnable() {
@Override
public void run() {
socket = new Socket();
InetSocketAddress socketAddress = new InetSocketAddress(ip, port);
try {
socket.connect(socketAddress);
socketOutput = socket.getOutputStream();
socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
new ReceiveThread().start();
if(listener!=null)
listener.onConnect(socket);
} catch (IOException e) {
if(listener!=null)
listener.onConnectError(socket, e.getMessage());
}
}
}).start();
}
public void disconnect(){
try {
socket.close();
} catch (IOException e) {
if(listener!=null)
listener.onDisconnect(socket, e.getMessage());
}
}
public void send(final String message){
new Thread()
{
public void run()
{
try {
socketOutput.write(message.getBytes());
} catch (IOException e) {
if(listener!=null)
listener.onDisconnect(socket, e.getMessage());
}
}
}.start();
}
private class ReceiveThread extends Thread implements Runnable{
public void run(){
String message;
try {
while((message = socketInput.readLine()) != null) { // each line must end with a \n to be received
Log.d("RECEIVE THREAD RUN() : ", "Progressing...");
if(listener!=null)
listener.onMessage(message);
}
} catch (IOException e) {
if(listener!=null)
listener.onDisconnect(socket, e.getMessage());
}
}
}
public void setClientCallback(ClientCallback listener){
this.listener=listener;
}
public void removeClientCallback(){
this.listener=null;
}
public interface ClientCallback {
void onMessage(String message);
void onConnect(Socket socket);
void onDisconnect(Socket socket, String message);
void onConnectError(Socket socket, String message);
}
}
your Activity.java
/* Socket Comm */
TcpClient mClient;
// onCreate Inner
mClient = new TcpClient("192.168.0.1", 6000);
mClient.setClientCallback(new TcpClient.ClientCallback () {
@Override
public void onMessage(String message) {
Log.d("SERVER RECEIVE : ", message);
}
@Override
public void onConnect(Socket socket) {
mClient.send("Hello World!\n");
}
@Override
public void onDisconnect(Socket socket, String message) {
}
@Override
public void onConnectError(Socket socket, String message) {
}
});
mClient.connect();
...
...
...
}
반응형
'Development Language > JAVA · ANDROID' 카테고리의 다른 글
[ANDROID] Your project path contains non-ASCII characters. (0) | 2019.01.16 |
---|---|
[ANDROID] Kotlin Plugin Error (0) | 2019.01.16 |
[ANDROID] SURFACEVIEW를 이용하여 CAMERA 사용하기 #6 - 오토포커싱(autoFocusing) (2) | 2017.06.19 |
[ANDROID] SURFACEVIEW를 이용하여 CAMERA 사용하기 #5 - 촬영된 이미지 저장 (0) | 2017.06.19 |
[ANDROID] SURFACEVIEW를 이용하여 CAMERA 사용하기 #4 - 촬영 기능 구현 (0) | 2017.06.19 |
Comments