UDP LISTEN

rsegoly

New member
UDP LISTEN

אני מעלה את הפוסט פעם נוספת כי נתקע לי בפעם הקודמת. מתנצל אם זה מגיע פעמיים
יש לי מכשיר ששולח נתונים ב UDP ל IP ו PORT שאני מגדיר לו
אני יכול לקבל את הנתונים באמצעות NETCAT אך לא מצליח עם PHP והעמוד נתקע
אני משתמש בדוגמה שראיתי בתיעוד של PHP אך העמוד נתקע
אני יכול להפנות את השידור לכל IP לכן אם מישהו יכול לעזור לי לעשות DEBUG ויש לו פורט פנוי אז אני יכול לשנות
אני מצרף את הסקריפט בו השתמשתי
זה קישור לסקריפט בו השתמשתי
https://www.dropbox.com/s/yski53pe6tlswb4/index.php
תודה מראש
רוני
 
כשכותבים כזה קוד נהוג להריץ אותו מהCLI

ולא דרך שרת WEB.
זה כבר יחסוך לך הרבה בעיות.

חוץ מזה אתה צריך להשתמש גם ב
http://www.php.net/manual/en/function.socket-accept.php

בגדול ה life cycle לעבודה עם סוקטים נכנסים הוא
create
bind
listen
accept בתוך לולאת while, שאת החיבור שאתה מקבל ממנו אתה צריך להכניס לתוך socket_select
 
כמה הארות נוספות:

הסיבה שלא דרך WEB :
WEB בנוי לעבודה של request response
PHP שאמור לשרת בקשת HTTP "אמור" לרוץ באופן לינארי, לסיים את העבודה כמה שיותר מהר, ולהחזיר תשובה.
לכן בדרך כלל הPHP מוגבל מאוד שהוא רץ בסביבה כזו, הגבלות זמן ריצה מקסימליות, זיכרון, וגם אתה בעצם תופס פרוסס של שרת הWEB או CGI שהם מוגבלים בכמות

ועל PHP ו daemons
כשכותבים daemon הקוד הראשי אמור לרוץ לנצח, להאזין על הסוקט ולחכות לחיבורים נכנסים
אחרי שהוא קיבל חיבור נכנס הוא צריך לשינויים בחיבורים הנכנסים ולטפל במידע שמגיע מהם/לשלוח להם את המידע שהוא רוצה לשלוח להם.
את כל זה אפשר לעשות בלי בעיה בPHP, למרות שאולי עדיף node.js בשביל זה כי PHP יודע רק לעשות BLOCK לזמן מסויים ולא להגיב ל EVENTS של socket accepted או socket change
אז אתה חיב לעבוד בתוך לולאת while שפעם אתה עושה block על ה except ופעם על הsocket change
 

rsegoly

New member
הבהרות

אין לי בכלל נסיון ב PHP והשנים האחרונות שכתבתי קוד היו מזמן מזמן
זה פרויקט בתחום אחר לחלוטין, חסכון בחשמל, ולכן התחלתי להשתעשע עם הנושא אך אני מחזיק את עצמי לא לשקוע לכתיבת קוד של ממש ולהיות ממוקד בפרויקט.
ניסיתי כעת CLI ואני מבין שצריך לכתוב בסביבה זו ולא בתוך WEB SERVER וחשבתי אתמול אחרי שכתבתי את הפוסט שיש צורך להכנס ללולאה ולאסוף כל הזמן את הפאקטים. אך אני אחפש דוגמה פשוטה עובדת (אשמח אם יש לך להראות לי) שיש בה כמה שפחות קוד אחר, כדי שאני אבין ולא סתם אעתיק.
המון תודה
 
ממש לא
לחבילה קוראים nodejs

זה דווקא יעבור יותר טוב על לינוקס מוינדוס
 

rsegoly

New member
אני מסתכל אך שאלה בינתיים

אני יכול להריץ NETCAT (מכיר?) והוא משמש UDP CLIENT ומקבל היטב את הנתונים. האם אפשר פשוט להריץ אותו מתוך סקריפט ולתפוס את מה שהוא מקבל תוך שהוא נשאר בלולאה אין סופית?
 

rsegoly

New member
התכנית שלי

כעת הכל ממש פרמיטיבי
עשיתי לולאה אין סופית עם מונה שגדל ב 1 בכל קריאה
בפעם החמישים הוא שולח לי מייל ומתאפס וחוזר חלילה
מה שאעשה בהמשך הוא התראות, כיוון שמדובר בצריכת חשמל, אז אני אקבע סף כלשהו וכאשר הצריכה תעבור אותו אקבל מייל וכך כל דקה עד שהיא תרד מתחת לסף
בנוסף אני יכול להשתמש ב IFTTT כדי להזין את הנתונים לאקסל בגוגל דוקס
יש המון אפשרויות
אני מנסה כעת פונקצית המייל, זה צועק לי על INCLUDE אך אני עייף מכדי להמשיך
Failed opening 'Mail.php' for inclusion
 

bnayal

New member
מסקרנות מאיפה אתה מקבל מידע של צריכת החשמל?

זה צריכה של המחשב או משהו אחר?
 

rsegoly

New member
מתנצל על התשובה הלקונית קודם לכן

אני משתמש במכשיר שנקרא ינשוף
http://gte.greentops.co.il/המוצרים/tabid/598/Default.aspx
זה אחד הפיצ'רים המובנים בו כאשר רוכשים גם מודול שמחבר לאינטרנט
יש לי שלש חלקים למכשיר זה
משדר שמחובר בהדקים לארון החשמל
מכשיר נייד בבית שקולט נתונים מהמשדר ומציגם בצג וגם אוגר אותם למשך חודש
ובמקביל יחידה שמחוברת לראוטר ומשדרת לאתר שלהם אך גם יודעת לשלוח UDP את הנתונים
 
למעלה