이제 막 코딩을 따라하고 있는 초보자입니다.
라즈베리파이와 안드로이드 스튜디오 버튼 3개를 통한 소켓 통신을 할려고 합니다.
버튼 하나당 Textview에 통신을 받을려고 하고 있는데, 계속 하나에만 통신이 되어서 문의 드립니다.
라즈베리파이 서버 코드(파이썬)
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(16, GPIO.IN)
GPIO.setup(12, GIPO.IN)
GIPO.setup(13, GIPO.IN)
HOST = ""
PORT = 8091
PORT = 8092
PORT = 8093
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ('Socket created')
s.bind((HOST, PORT))
print ('Socket bind complete')
s.listen(1)
print ('Socket now listening')
#파이 컨트롤 함수
def do_some_stuffs_with_input(input_string):
if input_string == "send":
input_string = "..."
else :
input_string = input_string + " 없는 명령어 입니다."
return input_string
while True:
conn, addr = s.accept()
print("Connected by ", addr)
data = conn.recv(1024)
data = data.decode("utf8").strip()
if not data: break
print("Received: " + data)
res = do_some_stuffs_with_input(data)
print("파이 동작 :" + res)
if GPIO.input(16) == 1:
command =("1")
conn.sendall(command.encode("utf-8"))
elif GIPO.input(12) == 1:
command =("2")
conn.sendall(command.encode("utf-8"))
elif GIPO.input(13) == 1:
command =("3")
conn.sendall(command.encode("utf-8"))
else:
conn.sendall(res.encode("utf-8"))
conn.close()
s.close()
안드로이드 스튜디오 MainActivity 코드
public class MainActivity extends AppCompatActivity {
TextView recieveText;
TextView recieveText2;
TextView recieveText3;
Button button;
Socket socket = null;
static int counter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recieveText = (TextView)findViewById(R.id.recieveText);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//messageText.setText("");
TimerTask tt = new TimerTask() {
@Override
public void run() {
MyClientTask myClientTask = new MyClientTask("172.30.1.39",
Integer.parseInt("8091"), "0");
myClientTask.execute();
}
};
Timer timer = new Timer();
timer.schedule(tt,0,200);
}
});
recieveText2 = (TextView)findViewById(R.id.recieveText2);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TimerTask tt = new TimerTask() {
@Override
public void run() {
MyClientTask myClientTask = new MyClientTask("172.30.1.39",
Integer.parseInt("8092"), "0");
myClientTask.execute();
}
};
Timer timer = new Timer();
timer.schedule(tt, 0, 200);
}
});
recieveText3 = (TextView)findViewById(R.id.recieveText3);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TimerTask tt = new TimerTask() {
@Override
public void run() {
MyClientTask myClientTask = new MyClientTask("172.30.1.39",
Integer.parseInt("8093"), "0");
myClientTask.execute();
}
};
Timer timer = new Timer();
timer.schedule(tt, 0, 200);
}
});
}
public class MyClientTask extends AsyncTask<Void, Void, Void> {
String dstAddress;
int dstPort;
String response = "";
String myMessage = "";
MyClientTask(String addr, int port, String message) {
dstAddress = addr;
dstPort = port;
myMessage = message;
}
@Override
protected Void doInBackground(Void... arg0) {
Socket socket = null;
myMessage = myMessage.toString();
try {
socket = new Socket(dstAddress, dstPort);
OutputStream out = socket.getOutputStream();
out.write("0".getBytes());
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(1024);
byte[] buffer = new byte[1024];
int bytesRead;
InputStream inputStream = socket.getInputStream();
while ((bytesRead = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, bytesRead);
response += byteArrayOutputStream.toString("UTF-8");
}
response = "sever:" + response;
} catch (UnknownHostException e) {
e.printStackTrace();
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
e.printStackTrace();
response = "IOException: " + e.toString();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}