ฉันมีอุปกรณ์ฝังตัวใน LAN และแอปพลิเคชัน c++ ใน Linux ในคอมพิวเตอร์ ฉันได้ทำการออกอากาศ UDP บนที่อยู่ออกอากาศซับเน็ตของฉันจาก C++ และอุปกรณ์ของฉันส่งคืนข้อความพร้อมลายเซ็น ตอนนี้ทั้งคู่มีที่อยู่ IP ของกันและกันแล้ว ฉันต้องส่งแพ็กเก็ต UDP จาก C++ ไปยัง IP อุปกรณ์ของฉันโดยเฉพาะ การเรียกอุปกรณ์ของฉันครั้งแรกทำได้ผ่าน UDP แต่ใช้ตัวเลือกการออกอากาศในตัวเลือกซ็อกเก็ต การทดลองบางอย่างของฉันกับเครื่องมือสร้างแพ็กเก็ตทำให้ฉันรู้สึกว่า UDP ใช้ MAC ID เพื่อค้นหาปลายทาง ดังนั้นวิธีการใน C ++ ควรเป็นอย่างไรหากฉันต้องการส่งแพ็กเก็ต UDP ไปยัง IP เฉพาะของฉันใน LAN ของฉัน ขอบคุณ
แพ็กเก็ต UDP ไปยัง IP เฉพาะใน LAN
คำตอบ (3)
จากการตอบกลับของคุณต่อ stefaanv ดูเหมือนว่าคำถามของคุณคือ "ฉันจะรับที่อยู่ IP จากเธรด A ไปยังเธรด B ได้อย่างไร" โดยที่เธรด A ได้รับการตอบกลับข้อความออกอากาศและเธรด B จะทำเฉพาะอุปกรณ์ การสื่อสาร.
วิธีหนึ่งที่คุณสามารถทำได้คือสร้างเธรด B จากเธรด A และส่งที่อยู่ IP เป็นอาร์กิวเมนต์ไปยังฟังก์ชันของเธรด B วิธีนี้จะทำให้เธรด B รู้ตั้งแต่เริ่มต้นว่าควรพูดคุยกับที่อยู่ IP ใด
หากเธรด B ต้องเปิดใช้งานก่อนเธรด A คุณสามารถแชร์ที่อยู่ IP โดยใช้ตัวแปรร่วม และใช้ เช่น เซมาฟอร์เพื่อให้เธรด A สามารถบอกเธรด B เมื่อตั้งค่าที่อยู่ IP แล้ว เพียงให้แน่ใจว่าเธรด A เป็นเธรดเดียวที่เขียนตัวแปรส่วนกลางนั้น ไม่เช่นนั้นคุณจะต้องตั้งค่าการซิงโครไนซ์อีกชั้นหนึ่ง เช่น ใช้ mutex เพื่อให้แน่ใจว่าการเขียนไปยังที่อยู่ IP ทำได้ครั้งละหนึ่งเธรดเท่านั้น
หากคุณส่งการออกอากาศและคาดหวังคำตอบผ่าน UDP คุณควรได้รับพร้อมกับ recvfrom โทร. เพื่อกรอกที่อยู่ของผู้ส่ง การเรียกที่เกี่ยวข้องเพื่อส่ง UDP พร้อมด้วยข้อมูลที่อยู่ที่ได้รับคือ sendto
คุณไม่ได้ระบุ O/S แต่...
คุณสามารถกำหนดให้ซ็อกเก็ต UDP ใช้ เชื่อมต่อ ได้หากต้องการ ซึ่งหมายความว่าการส่งเพิ่มเติมไปยังซ็อกเก็ตนั้นจะไปที่ IP ที่คุณ "เชื่อมต่อ" ไปด้วย ทั้งหมดนี้แม้ว่า UDP จะไม่มีการเชื่อมต่อก็ตาม
boost::asio
แล้วหรือยัง? - person Geoffroy   schedule 02.07.2013