يوفر هذا المستودع دفق بيانات آمنًا وموثوقًا يعمل مثل TCP.
هدفي هو تمكين المستخدمين من إنشاء اتصال P2P بين العملاء في NAT مغلق.
برنامج تعليمي للمستخدمين "لا يمكن العمل على حالتي"
pip3 install --user srudp
git clone https://github.com/namuyan/srudp
cd srudp
pip3 install --user -r requirements.txt
python3 -m mypy --config-file=mypy.ini srudp
python3 -m unittest discover
قم بإعداد جهازي كمبيوتر مستقلين.
from srudp import SecureReliableSocket
from time import sleep , time
sock = SecureReliableSocket ()
sock . connect (( "<remote host 1>" , 12345 ))
while not sock . is_closed :
sock . sendall ( b'hello ' + str ( time ()). encode ())
sleep ( 3 )
print ( "closed" , sock )
جانب، أرسل رسالة مرحبا مرة واحدة في 3 ثواني.
from srudp import SecureReliableSocket
from time import time
sock = SecureReliableSocket ()
sock . connect (( "<remote host 2>" , 12345 ))
while not sock . is_closed :
data = sock . recv ( 1024 )
if not data :
break
print ( time (), data )
print ( "closed" , sock )
جانب آخر، استقبل الرسالة وأظهرها فورًا.
from srudp import SecureReliableSocket
import asyncio
# Get a reference to the current event loop
loop = asyncio . get_event_loop ()
# create a socket
sock = SecureReliableSocket ()
# connect() on another thread because block event loop
address = ( "example.com" , 3000 )
await loop . run_in_executor ( None , sock . connect , ( address ,))
# Register the open socket to wait for data
reader , writer = await asyncio . open_connection ( sock = sock )
# read
data = await reader . read ( 1024 )
# write
writer . write ( b"hello" )
writer . write ( b"world" )
await writer . drain ()
# close
writer . close ()
يمكنك أن تفعل تمامًا مثل مقبس TCP العادي. ولكن إذا كنت لا تنوي ذلك، مثل بروتوكول HTTP الذي يتطلب الكثير من الاتصالات، فلن تضطر إلى استخدام طريقة غير متزامنة.
في هذه الأيام، يوجد الكمبيوتر الشخصي في بيئة محلية محمية بواسطة NAT. من الصعب نقل البيانات بين طرفين خارجيين. من أجل حل هذه المشكلة، يتم تحقيق الاتصال عن طريق ثقب UDP دون استخدام UPnP.
UDP هو بروتوكول مأخذ توصيل مع الحد الأدنى من الوظائف لتوصيل التطبيقات. لذلك، لا توجد حالة اتصال، وقد لا يمكن الوصول إلى البيانات، ومن السهل انتحال المصدر. ولهذا السبب، لا يمكنك استبداله كـ TCP.
باستخدام هذا البرنامج، يمكنك التعامل معه تمامًا مثل TCP دون القلق بشأن المشكلات المذكورة أعلاه. بمعنى آخر، لديها حالة اتصال، وتضمن إمكانية الوصول إلى البيانات، ويصعب تزويرها.
@نامويان
معهد ماساتشوستس للتكنولوجيا