올바른 클라이언트가 서버에서 승인 한 동일한 연결을 사용하여 데이터를 보내나요?.소켓 클라이언트는 서버가 허용 한 연결을 사용하여 전송합니다.
상황은 다음과 같습니다. 내 PC에서 파란 이빨 서버가 실행 중이고 반대편에 클라이언트와 서버가있는 안드로이드 전화가 있습니다. 안드로이드 측면에서 클라이언트가 연결을 시작합니다. 안드로이드 샘플에서 블루투스 채팅 예제를 사용하고 있습니다.
그리고
BluetoothSocket socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the BluetoothSocket input and output streams
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
같은 내가 서버와 클라이언트를 구현하는 Bluez 라이브러리를 사용하고있는 PC의 측면에서 안드로이드 모양에 서버 - 클라이언트.
서버가 블루투스 수신 스레드와 메인 스레드를 포함합니다. 서버가 안드로이드 전화에서 연결을 수락 할 때마다 소켓 값을 전역 변수에 할당하고 클라이언트가 동일한 소켓을 사용하여 데이터를 보내야 할 때마다
서버 : -
int GLOBAL_CLIENT;
void* recive_bluetooth_trd(void*)
{
...............................
..............................
client = accept(s, (struct sockaddr *)&rem_addr, &opt);
GLOBAL_CLIENT=client;
while(1){
bytes_read = read(client, buf, sizeof(buf));
....................
...................
}
클라이언트 : -
void clinet(char *msg, int length){
........................
int bytes_write=write(GLOBAL_CLIENT,message, length);
..........................
}
내 할건가 estion은 올바른 방법인가요? 문제는 클라이언트가 PC에서 데이터를 성공적으로 보내고 안드로이드 측에서는 수신하지 않는 경우가 있다는 것입니다.
이buf[bytes_read] = '\0';
귀중한 정보를 보내 주셔서 감사합니다. 여기 내 전체 코드 http://pastebin.com/embed_js.php?i=fa2Xv9Y1 – Haris
@ 하리스 예, 연결 해제를 처리하지 않습니다. 당신의 프로그램을 매우 슬프게 만들 수있다. 만약 당신이 0이된다면, 당신은'break'를해야한다. – xaxxon
아니,'<= 0'이라면 깨야한다. –