Repositori ini menyediakan Aliran Data Aman dan Andal yang berfungsi seperti TCP.
Tujuan saya adalah memungkinkan pengguna membuat koneksi P2P antar klien dalam NAT tertutup.
tutorial untuk pengguna "tidak dapat berfungsi pada kondisi saya"
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
Siapkan dua PC independen.
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 )
Di samping, kirim pesan halo sekali dalam 3 detik.
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 )
Sisi lain, terima pesannya dan segera tunjukkan.
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 ()
Anda dapat melakukan seperti soket TCP biasa. Namun jika tidak bermaksud, seperti protokol HTTP yang membutuhkan banyak koneksi, Anda tidak perlu menggunakan metode async.
Saat ini, PC terletak di lingkungan lokal yang dilindungi oleh NAT. Sulit untuk mentransfer data antara dua pihak luar. Untuk mengatasi masalah ini, sambungan dilakukan dengan pelubangan UDP tanpa menggunakan UPnP.
UDP adalah protokol soket dengan fungsi minimum untuk menghubungkan aplikasi. Oleh karena itu, tidak ada status koneksi, data mungkin tidak dapat dijangkau, dan mudah untuk memalsukan sumbernya. Inilah sebabnya, Anda tidak dapat menggantinya dengan TCP.
Dengan program ini, Anda dapat memperlakukannya seperti TCP tanpa mengkhawatirkan masalah di atas. Dengan kata lain, ia memiliki status koneksi, menjamin keterjangkauan data, dan sulit untuk dipalsukan.
@namuyan
MIT