ผมขอประเดิม forum นี้ด้วยกระทู้นี้เลยนะครับ

ตัวผมเองเป็นคนหนึ่งที่ต้องการเขียน Peer-To-Peer Application ระหว่าง Android กับ PC
และเนื่องจากว่า XMPP API หรือแม้แต่ Bluetooth API ยังใช้งานไม่ได้บน SDK เวอร์ชั่นปัจจุบัน (1.0 beta)

จึงต้องหันมาพึ่งที่พึ่งสุดท้ายซึ่งก็คือการคุยกันผ่าน Socket ด้วย java.net.* ไปก่อน

ทีนี้หลายคน(รึเปล่า?) อาจจะเคยติดปัญหาว่า โปรแกรมทั่วไปที่เขียนบนPC ไม่สามารถคุยกับ โปรแกรมที่อยู่บนAndroid Emulatorได้ เพราะว่า connect หากันไม่เจอ

โดยปัญหานี้จะเกิดกับเฉพาะในกรณีที่ให้ โปรแกรมบนAndroid Emulator เป็น Server (ServerSocket) ในขณะที่ โปรแกรมปกติบน PC เป็น Client (Socket)

ผมเลยขออาสามาแปะวิธีแก้ปัญหานี้นะครับ
นี่เป็นวิธีที่ผมไป สอบถาม และ ค้นเจอมาจาก group ของ Android Developer ที่คิดว่าหลายท่านอาจจะยังไม่รู้

วิธีก็คือ

1) ใช้คำสั่ง forward ใน adb เพื่อ forward port ที่เราต้องการจะเปิดคุยกัน (ทำก่อนที่จะรัน emulator)
โดยการพิมพ์ดังนี้ใน terminal หรือ cmd

adb forward tcp: (เบอร์port) tcp: (เบอร์port)

เช่น

adb forward tcp:1234 tcp:1234

2) หากโปรแกรมบน PC ของเรากับ Android Emuator อยู่คนละเครื่องกัน
ให้ใช้โปรแกรม ชื่อ stcppipe ในการทำ proxy (download stcppipe.exe ได้ ที่เว็บนี้ (http://aluigi.altervista.org/mytoolz.htm))

โดยวิธีใช้ให้รันดังนี้
stcppipe.exe -b (ipบนระบบเครือข่ายของเรา) 127.0.0.1 (เบอร์port) (เบอร์port)

เช่น

stcppipe.exe -b 192.168.0.2 127.0.0.1 1234 1234

โดยให้รันทิ้งไว้บนเครื่องที่รัน Android Emulatorอยู่ ขณะที่ต้องการให้เครื่องสองเครื่องคุยกัน
เท่านี้โปรแกรมทั้ง Client และ Server ก็จะ connect กันได้แล้วครับ

ผมทดลองดูแล้วพบว่าได้ผลครับ สามารถคุยกันได้เรียบร้อย