Python Socket програмиране - Преди да започна с Python Socket програмиране, надявам се да имате добри основи в python. Ако познавате и Джанго, тогава ще бъде още по-лесно да се разбере. Не, програмирането на сокет не е свързано с Django, но терминологиите в програмирането на сокет Python и Django са почти еднакви, въпреки че са две различни категории. И така, за начало, какво точно е Python Socket Programming? Програмирането на Python Socket има не само в python, но и в Java и почти всички други езици за програмиране. Но в случая на python, програмирането на сокет всъщност е много лесно за разбиране. Python Socket програмиране означава мрежово програмиране. Той включва кодове от страна на клиента и свързани с сървъра Python Socket сървъри. Но това определение е също толкова добро, тъй като за разработване на софтуер се използва книга, в която се посочва програмирането на C. И не, не съм тук за това. Тук съм, за да сте сигурни, че ще разберете по-задълбочено основите на програмирането на сокет Python, преди всъщност да започнете да пишете свои собствени модули. Така че нека започнем и да видим как работи сокет или от страна на клиента или от страна на сървъра на Python Socket.

Какво е Python Socket програмиране?

Ако сте научили програмиране на C, тогава да научите програмиране на сотонови питони в Python би било много лесно, тъй като те са почти еднакви. За да стане по-просто, програмирането на сотонови питони са просто парче кодове за това как компютрите в мрежа комуникират помежду си. И това не завършва само с LAN базирана мрежа, тя също така поддържа WAN, MAN и интранет базирани мрежи. Ние дори използваме контакти в ежедневния си живот. Не разбирате? Нека ви дам един прост пример. Когато искате да се свържете с да кажем Facebook.com, просто напишете едно и също нещо в URL лентата. Така че тази връзка, която току-що създадохте, не е просто създадена от нещата от DNS. Всичко това е конфигурирано чрез програмиране на сотонови питони. Сокетите решават как две мрежи общуват. Всяка комуникация, преминаваща през мрежа, може да е видео, VOIP връзки или просто текст; всичко минава през гнездо. Сега, когато знаем какви са гнездата, нека да разработим свой собствен гнездо в python.

Източник на изображение: pixabay.com

Видове програмиране на гнездо Python

Сега там има много контакти. Но няма да говорим за всички тях, тъй като тук не мога да покрия всеки един от тях. Можете да създадете UDP сокет, TCP гнездо или дори гнездо на порт и има много повече, ако продължа. Но бих искал да разгледам повече TCP и UDP сокети днес, тъй като те са най-основните и те могат да бъдат изключително добри като начинаещ момент, за да започнете с програмирането на Python Socket.

  • Програмиране на UDP контакти

User Datagram Protocol или неговият обикновено известен като UDP е алтернативен протокол към TCP, който прехвърля пакети от един хост в друг. Но за разлика от TCP (протокол за управление на предаването), UDP е протокол без връзка и е ориентиран без поток. Това означава, че UDP сървърът ще улавя само входящи пакети от целия хост, без да идентифицира надеждна връзка с източника. За целта ще използваме функцията socket.socket. Прост UDP сокет се създава по следния начин в Python:

import socket #importing socket module from python library # Сега трябва да създадем AF_INET и sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) печат „Socket Creation uspješno”

Да. Това е всичко и ние създадохме прост UDP сокет тук в python. Python Socket Програмирането или дори създаването на обикновен сокет не е ракетна наука. Но обаче голямата работа се състои в кодирането на UDP сървъра и клиента. Тъй като UDP гнездата са без връзка, comms се инициират с функции за изпращане и получаване на гнездо. Тези функции не изискват те да се свързват помежду си. Те всъщност могат да изпращат и получават пакети от всеки произволен източник. Ето как се създава UDP сървър:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind (("", port)) печат "Изискване на свързване към порта на машината", порт

докато 1:

данни, адрес = s.recvfrom (1024)

отпечатване на данни

Това може да не изглежда много, но така се създава всъщност. Човек може да използва всеки порт тук. Току-що избрах случаен такъв като 2924. UDP сървърът се нуждае от порт, който да бъде отворен, за да изпраща и получава входящи връзки. Няма слушане на порт или приемане на връзки или заявка. Просто става без никакво удостоверяване. Опитайте да стартирате горния сървър на терминал и вижте как работи.

Това е просто един прост UDP сървър, който създадохме. Нека го направим малко по-интересно, а също и малко по-сложно:

"" Това е прост UDP сокет сървър "" импортиране на socketimport sys

HOST = “” # Тук можете да изпробвате всички налични интерфейси

PORT = 2924 # Всеки произволен порт, който не се използва по подразбиране в Windows или Linux distros

# Кодиране на UDP сокета

опитвам :

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

отпечатай „Сокет инициализиран“ “

с изключение на socket.error, msg:

печат „Създаването на сокета не бе успешно. Възникна следната грешка: ”+ str (msg (0)) +‘ Съобщение ’+ msg (1)

sys.exit ()

# Сега трябва да свържем този гнездо към горния хост и порт

опитвам:

s.bind ((HOST, PORT))

с изключение на socket.error, msg:

печат „Свързващото гнездо не е успешно. След грешка прекъсна връзката: ”+ str (msg (0)) +‘ Съобщение ’+ msg (1)

sys.exit ()

печат „Свързване на гнездото завършено“

# Поддържайте установената връзка

докато 1:

# улавяне на данни от клиента с помощта на променливи данни и адрес

d = s.recvот (1024)

данни = d (0)

адрес = d (1)

ако не данни:

почивка

reply = 'ОК …' + данни

s.sendto (отговор, адрес)

отпечатай 'Съобщение за токени (' + адрес (0) + ':' + str (адрес (1)) + ') -' + data.strip ()

s.close ()

Стартирайте горната програма и ще стартирате UDP сървър на порта 2924. Поздравления, успешно създадохте Socket в Python. И не забравяйте да отбележите, че UDP сървърът може да обработва много клиенти за разлика от TCP сървъра, като основната причина е, че няма фиксирана свързаност в UDP сървър, както в случая на TCP сървър.

Препоръчителни курсове

  • Сертификационен курс по отстраняване на грешки в Ruby
  • PHP MySQL курс
  • VB.NET Курс за сертифициране на програмиране
  • Цялостно обучение на ITIL Foundation
  • Програмиране на UDP клиент

Сега, когато успешно сме създали UDP сървър, се нуждаем от клиент, който да установи правилна връзка с него, така че да знаем как работи. Така че нека работим върху създаването на подходящ UDP клиент в Python. Този клиент ще се свърже с нашия UDP сървър, който създадохме по-горе:

"" Създаване на прост UDP клиент usind сокети "" импортиране socketimport sys

# Създаване на UDP сокет

опитвам:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

с изключение на socket.error:

печат „Създаването на сокета не бе успешно“

sys.exit ()

хост = '127.0.0.1'; # Можете също да опитате да използвате localhost insead на този IP, и двете са еднакви.

порт = 2924;

докато (1):

msg = raw_input ('Въведете съобщение за изпращане до сървъра:')

опитвам :

# Сега трябва да зададем низовете

s.sendto (msg, (хост, порт))

# Сега трябва да получим данни и адрес от клиента, използвайки данни и адрес

d = s.recvот (1024)

отговор = d (0)

адрес = d (1)

print 'Отговор от сървъра е:' + отговор

с изключение на socket.error, msg:

print 'След грешка се появява:' + str (msg (0)) + 'Съобщение' + msg (1)

sys.exit ()

Мда. Създаването на UDP клиент в програмирането на Python Socket е много по-лесно от създаването на UDP сървър. Но така става. Не мисля, че би трябвало да обяснявам нещо от горния фрагмент код, тъй като вече споменах всички необходими неща в коментарите # tag. Просто се уверете, че IP адресът и портът, които сте въвели, са правилни и вашата защитна стена не блокира връзката, иначе винаги ще доведе до неуспех, независимо какво.

  • TCP Socket програмиране

Сега, когато научихме как да създадем UDP клиент и сървър, нека да разгледаме програмирането на TCP сокети. Ще използваме същата функция socket.socket, за да създадем TCP гнездо тук.

import socket # Импортиране на гнездото на модула от библиотеките на python # създайте AF_INET и поточно socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) печат „Socket Creation uspješno

Тук AF_INET се използва за Ipv4 адресна връзка, а чорапният поток е протокол, ориентиран към TCP. Това е обикновен TCP сокет, който сме създали. Сега ще създадем разширена версия на същото нещо. Ще хвърляме и изключения тук, по същия начин, по който го хвърлихме при създаването на UDP сървъри и клиенти, така че в случай, че връзката се провали, ще знаем къде се намира действителната програма. Socket.error ще се използва за справяне с всички тези грешки, подобни на тези на UDP програмиране.

Затова сега ви позволява да създадете гнездо с горната обработка на грешки и да се свържете с хоста facebook.com. Ето как трябва да се направи:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

с изключение на socket.error, msg:

print 'Създаването на сокета не бе успешно. Възникна следната грешка: '+ str (msg (0)) +', съобщение за грешка: '+ msg (1)

sys.exit ();

печат „Създаване на сокет успешно“

host = 'www.facebook.com'

порт = 2924

опитвам:

remote_ip = socket.gethostbyname (хост)

с изключение на socket.gaierror:

print 'Неправилно име на хост. Излизането от …

sys.exit ()

печат “+ хост + IP адрес“ е „+ remote_ip

s.connect ((remote_ip, port))

отпечатайте "Socket Свързан с" + хост + "на ip" + remote_ip

Сега това е достатъчно, ако трябва просто да продължим връзка. Но това не е нашата цел. Ние възнамеряваме да създадем връзка, където да можем да изпращаме и получаваме данни и от двата края. Можем да изпращаме данни чрез функцията sendall. Ето как става:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

с изключение на socket.error, msg:

print 'Създаването на сокета не бе успешно. Възникна следната грешка: '+ str (msg (0)) +', съобщение за грешка: '+ msg (1)

sys.exit ();

печат „Създаване на сокет успешно“

host = 'www.facebook.com'

порт = 2924

опитвам:

remote_ip = socket.gethostbyname (хост)

с изключение на socket.gaierror:

print 'Неправилно име на хост. Излизането от …

sys.exit ()

печат “+ хост + IP адрес“ е „+ remote_ip

s.connect ((remote_ip, port))

отпечатайте "Socket Свързан с" + хост + "на ip" + remote_ip

#transfering данни чрез функцията sendall

съобщение = „GET / HTTP / 1.1 \ r \ n \ r \ n“

опитвам :

s.sendall (съобщение)

с изключение на socket.error:

# Изпращане не бе успешно

печат "Провал на предаване"

sys.exit ()

печат „Състояние на съобщението: Изпратено“

Сега, след като създадохме успешна връзка и можем също да изпратим данните, нека да разгледаме как бихме могли да получим данните напълно. Ето как става:

import socket #importing socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

с изключение на socket.error, msg:

print 'Създаването на сокета не бе успешно. Възникна следната грешка: '+ str (msg (0)) +', съобщение за грешка: '+ msg (1)

sys.exit ();

печат „Създаване на сокет успешно“

host = 'www.facebook.com'

порт = 2924

опитвам:

remote_ip = socket.gethostbyname (хост)

с изключение на socket.gaierror:

print 'Неправилно име на хост. Излизането от …

sys.exit ()

печат “+ хост + IP адрес“ е „+ remote_ip

s.connect ((remote_ip, port))

отпечатайте "Socket Свързан с" + хост + "на ip" + remote_ip

#transfering данни чрез функцията sendall

съобщение = „GET / HTTP / 1.1 \ r \ n \ r \ n“

опитвам :

s.sendall (съобщение)

с изключение на socket.error:

# Изпращане не бе успешно

печат "Провал на предаване"

sys.exit ()

печат „Състояние на съобщението: Изпратено“

# Сега, за да получим данни, ние използваме функцията recv, за да го постигнем

отговори = s.recv (4096)

отпечатай отговор

Последното е, че трябва да затворим гнездото, което бихме могли да направим чрез следния код:

s.close ()

И накрая, задължителната част. Можем да използваме функцията bind, за да свържем заедно сокети с ip адреси и портове.

import socketimport sysHOST = ”#Това е по същия начин, по който направихме в UDP протоколPORT = 2924 # порт за достъп до данни.

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

печат „Създаване на сокет успешно“

опитвам:

s.bind ((HOST, PORT))

с изключение на socket.error, msg:

print 'Свързването не бе успешно. След грешка възникна '+ str (msg (0)) +' Съобщение '+ msg (1)

sys.exit ()

печат „Свързване на гнездото успешно“

Сега трябва да слушаме входящи за входящи връзки, ако се нуждаем от сървъра, за да се свържем. Това може да стане със следната проста команда:

s.listen (10) печат „Слушателят стартира“

И накрая, трябва да създадем гнездо, за да приемем тези връзки:

import socketimport sysHOST = ”PORT = 2924

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

печат „Създаване на сокет успешно“

опитвам:

s.bind ((HOST, PORT))

с изключение на socket.error, msg:

print 'Свързването не бе успешно. След грешка възникна '+ str (msg (0)) +' Съобщение '+ msg (1)

sys.exit ()

печат „Свързване на гнездото успешно“

s.listen (10)

печат „Слушателят стартира“

# Приемане на връзки

conn, addr = s.accept ()

# Предоставяне на свързана информация за клиента

печат „Връзката е установена с„ + addr (0) + “: '+ str (addr (1))

Всъщност има много повече за това. Можем също така да пишем кодове за обработващи и други неща. Но мисля, че това ще е това засега. Уверете се, че имате правилни тези основи, след което останалите части са само парче торта, за да научите.

Първи източник на изображения: pixabay.com

Свързани статии:-

Ето няколко статии, които ще ви помогнат да получите повече подробности за Python Socket Programming, така че просто преминете през линка.

  1. 25 най-удивителни Python интервюта въпроси и отговори
  2. Кариера в Python
  3. Какви са ползите и ограниченията от използването на Python?
  4. Важна разлика Python срещу Ruby Performance
  5. Въведение в Socket програмиране в PHP
  6. Socket програмиране в Java | Метод на клас гнездо