Open lilly2232 opened 9 years ago
라즈베리파이와 시그윈(리눅스) 간 UDP 통신 확인 소켓 연결 확인 완료 안드로이드 UDP 클라이언트 구현 예정
(1) http://barnabas.kr/index.php/archives/259993 Server )
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(19795);
Client )
socket = new DatagramSocket() ;
InetAddress host = InetAddress.getByName( SERVER_NAME );
DatagramPacket packet = new DatagramPacket
( sendData, sendData.length, host, SERVERPORT );
socket.send( packet ) ;
socket.setSoTimeout( 5000 ) ;
packet.setData( new byte[100] ) ;
socket.receive( packet ) ;
(2) http://yagi815.tistory.com/999 Server ) server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(8197);
server_len = sizeof(server_address);
Client ) socket = new Socket("150.183.234.168",8197);
// server -> client 출력용 스트림
bos = new BufferedOutputStream(socket.getOutputStream());
byte[] b = new byte[1024];
b = "abc".getBytes();
bos.write(b);
bos.flush();
//Client--> server 입력용 스트림
bis = new BufferedInputStream(socket.getInputStream());
byte[] c = new byte[1024];
system.out.println(c);
안드로이드에서는 문자열을 처리할 때 UTF-8 로 처리하고, C 에서는 기본적으로 아스키로 처리. 전송시에는 스트링을 바이너리 데이터로 바꿔서 보내야된다.
Issue) 동일한 Linux client- server 동작 , 라즈베리파이 server- 외부 Client 동작 하지만, Android Client와 통신이 안됨 ==> Port와 주소를 인식을 못함
Host의 Byte 순서를 To Network Byte 순서로 바꾸어 주어서 해결. 동일한 와이파이 망에 연결 된채 테스트를 해야 했음.
라즈베리파이 server와 Android 단 UDP 소켓 통신 구현 완료 (O) 라즈베리 파이와 Android 간 테스트 완료 ( 파이의 AP주소를 통해 패킷 송수신 가능)
UDP 통신은 Connection을 계속 유지하여 데이터를 전송하는 것이 아니라 매번 상대방의 IP 주소와 포트 번호를 명시하여 통신을 한다. 또한 UDP 는 Broadcasting과 Multicasting을 지원한다.
서버 하나와 client 여러대에 소켓을 할당하여 쓰레드를 이용해 통신을 하려 했다. 하지만 같은 망 네트워크 상의 모든 호스트로 전송하는 방식으로 브로드 캐스팅이 있었다. 우리는 AP를 이용하여 하나의 네트워크를 형성 하기 때문에 브로드 캐스팅이 더 적합하다 판단하여 쓰레드가 아닌 브로드 캐스팅 방법을 선택하였다. 이를 통해, 쓰레드 딜레이에 대한 문제를 해결할 수 있었고 UDP의 장점을 살려 효율적으로 음성 스트리밍을 할 수 있게 되었다.
git Hub UDP code (linux- server <-> Android Client) (linux- server <-> linux Client) git Hub Broadcasting code (linex- server <-> Android Client)(linux- server <-> linux Client) 동일 AP환경에서 Broadcasting으로 server와 2개 linux client 동시에 Test 동일 AP환경에서 Broadcasting으로 server와 2개 Android client 동시에 Test
Linux server와 Linux client 간 Broadcasting Test ( 동일 네트워크 하에서 )
Broadcasting을 위해서 Bcast를 255로 다 받을 수 있도록 해야한다. socket 생성하고 Broadcasting을 하겠다는 socketopt 부분이 필요!
< 네트워크 UDP 통신 구현 >
라즈베리파이 server 구현 (O)
안드로이드 client 구현 (O)
멀티 쓰레드 소켓 통신 ->> UDP Broadcasting으로 수정
쓰레드 생성 --------------------- > linux broadcast server 구현
쓰레드 생성 Test ----------------------> linux client 구현
멀티 쓰레드 구현 ----------------------> Android client 구현
소켓 멀티 쓰레드 구현 ----------------------> linux, Android Client Test
★ issue 쓰레드간 딜레이 ==============> 쓰레드 Context Swtiching X
< 네트워크 UDP 통신 구현 > 라즈베리파이 server 구현 안드로이드 client 구현 쓰레드 생성 쓰레드 생성 Test 멀티 쓰레드 구현 소켓 멀티 쓰레드 구현 ★ issue 쓰레드간 딜레이