يقول برنامج الخادم الخاص بي errno99: cannot assign requested address
أثناء استخدام عنوان IP غير 127.0.0.1
للتجليد.
ولكن إذا كان عنوان IP هو 127.0.0.1
فهو يعمل. هل هو مرتبط بمساحات الأسماء؟
أقوم بتنفيذ أكواد الخادم والعميل الخاصة بي في برنامج آخر python program عن طريق الاتصال بـ execfile()
. أنا أعدل فعليًا شفرة مصدر mininet. لقد قمت بتحرير net.py وداخله كنت أستخدمه execfile ('server.py') execfile ('client1.py') و execfile ('client2.py'). بمجرد استدعاء "Sudo mn --topo single، 3" مع إنشاء 3 مضيفين سيتم تنفيذ رموز الخادم والعميل. لقد قدمت رموز الخادم والعميل الخاصة بي أدناه.
#server code
import select
import socket
import sys
backlog = 5
size = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("10.0.0.1",9999))
server.listen(backlog)
input = [server]
running = 1
while running:
inputready,outputready,exceptready = select.select(input,[],[])
for s in inputready:
if s == server:
client, address = server.accept()
input.append(client)
else:
l = s.recv(1024)
sys.stdout.write(l)
server.close()
#client code
import socket
import select
import sys
import time
while(1) :
s,addr=server1.accept()
data=int(s.recv(4))
s = socket.socket()
s.connect(("10.0.0.1",9999))
while (1):
f=open ("hello1.txt", "rb")
l = f.read(1024)
s.send(l)
l = f.read(1024)
time.sleep(5)
s.close()
تجريد الأشياء إلى الأساسيات ، هذا هو ما تريد اختباره باستخدام:
import socket
server = socket.socket()
server.bind(("10.0.0.1", 6677))
server.listen(4)
client_socket, client_address = server.accept()
print(client_address, "has connected")
while 1==1:
recvieved_data = client_socket.recv(1024)
print(recvieved_data)
هذا يعمل بافتراض بعض الأشياء:
جرب ما يلي ، افتح قائمة البدء ، في نوع الحقل "بحث" cmd
واضغط على إدخال. بمجرد فتح وحدة التحكم السوداء ، اكتب ping www.google.com
وهذا يجب أن يمنحك وعنوان IP لجوجل. هذا العنوان هو googles IP المحلي وهم يرتبطون بذلك ومن الواضح أنه يمكنك عدم الربط بعنوان IP الذي تملكه google.
مع وضع ذلك في الاعتبار ، فأنت تمتلك مجموعة عناوين IP الخاصة بك. أولاً لديك IP المحلي للخادم ، ولكن بعد ذلك لديك IP المحلي لمنزلك. في الصورة أدناه 192.168.1.50
هو عنوان IP المحلي للخادم الذي يمكنك ربطه. لا تزال تملك 83.55.102.40
ولكن المشكلة هي أنها مملوكة من قبل الموجه وليس لخادمك. لذلك حتى إذا قمت بزيارة http://whatsmyip.com والتي تخبرك بأن عنوان IP الخاص بك هو 83.55.102.40
فهذا ليس هو الحال لأنه يمكن أن يرى فقط من أين أنت. وأنت تقوم بالوصول إلى الإنترنت الخاص بك من جهاز التوجيه.
لكي يتمكن أصدقاؤك من الوصول إلى الخادم الخاص بك (والذي يرتبط بـ 192.168.1.50
) ، يلزمك إعادة توجيه المنفذ 6677
إلى 192.168.1.50
ويتم ذلك في جهاز التوجيه الخاص بك. على افتراض أنك تقف وراء واحد.
إذا كنت في المدرسة ، فهناك معضلات وموجهات أخرى في الطريق على الأرجح.
جرب مثل هذا: server.bind (("0.0.0.0" ، 6677))
عندما تربط localhost
أو 127.0.0.1
، هذا يعني أنه يمكنك فقط الاتصال بخدمتك من المحلية.
لا يمكنك الربط 10.0.0.1
لأنه ليس ملكًا لك ، يمكنك فقط ربط ip يملكه جهاز الكمبيوتر الخاص بك
يمكنك الربط 0.0.0.0
لأنه يعني كل بروتوكول الإنترنت على جهاز الكمبيوتر الخاص بك ، بحيث يمكن لأي عنوان IP الاتصال بالخدمة الخاصة بك إذا كان بإمكانهم الاتصال بأي من IP الخاص بك