பைதான் சாக்கெட் கோப்பு பரிமாற்றம் அனுப்பவும்

Python Socket File Transfer Send



இந்த கட்டுரையின் நோக்கம் கற்றுக்கொள்வதாகும் பைதான் நிரல் மூலம் ஒரு உரை கோப்பை நெட்வொர்க்கில் மாற்றுவது எப்படி . பைதான் 3+இல் சாக்கெட் புரோகிராமிங்கைப் பயன்படுத்த இந்த கோப்பு பரிமாற்றம் சர்வர் கிளையன்ட் மாதிரியை அடிப்படையாகக் கொண்டது.

இந்த நிரலை இயக்க அடிப்படை அமைவு வரைபடம் இங்கே.









எளிமைக்காக சிஸ்டம் A ஐ A_client என்றும் System B ஐ B_server என்றும் கட்டுரை முழுவதும் அழைப்போம்.



கோப்பு தேவைகள்:

எங்களுக்கு வேண்டும் server.py இந்த கோப்பு சேவையக அமைப்பில் இருக்க வேண்டும். எங்கள் விஷயத்தில் server.py B_server கணினியில் இருக்க வேண்டும்.





இன்னும் இரண்டு கோப்புகள் client.py மற்றும் மாதிரி. txt வாடிக்கையாளர் அமைப்பில் இருக்க வேண்டும். எங்கள் விஷயத்தில் அந்த இரண்டு கோப்புகளும் A_client கணினியில் இருக்க வேண்டும்.

அனுமானங்கள்:

அனுமானங்கள் இங்கே:



  • முனைய அணுகல் கொண்ட இரண்டு லினக்ஸ் அமைப்புகள் நம்மிடம் இருக்க வேண்டும்.
  • விரும்பத்தக்க லினக்ஸ் சுவை உபுண்டு .
  • பைதான் 3 நிறுவப்பட வேண்டும்.
  • இரண்டு லினக்ஸ் அமைப்புகள் ஒருவருக்கொருவர் பிங் செய்ய வேண்டும். பயன்படுத்தவும் பிங் பிங்கை சரிபார்க்க கட்டளை.
  • ஒரு அமைப்பு சேவையகமாகவும் மற்ற அமைப்பு ஒரு குறிப்பிட்ட நேரத்தில் வாடிக்கையாளராகவும் செயல்பட வேண்டும்.

வரம்புகள்:

நாம் மேலும் தொடர்வதற்கு முன் இந்த திட்டத்திற்கு சில வரம்புகள் உள்ளன என்பதை நாம் தெரிந்து கொள்ள வேண்டும்.

  • இந்த நிரலை இயக்க பைதான் 3+ நிறுவப்பட வேண்டும். பைதான் பழைய பதிப்புகளில் இயங்கினால் பிழை அல்லது மாறுபட்ட நடத்தையை நீங்கள் கவனிக்கலாம்.
  • இப்போதைக்கு இந்த நிரல் மூலம் உரை கோப்பை மட்டுமே மாற்ற முடியும். உரை இல்லாத வேறு எந்த வடிவமைப்புக் கோப்பும் தோல்வியடையக்கூடும்.
  • நிரலில் அடிப்படை நிரலாக்க விதிவிலக்குகள் கையாளப்பட்டுள்ளன.
  • புரோகிராம் உபுண்டுவைத் தவிர மற்ற OS இல் இயங்கலாம் அல்லது இயங்காமல் போகலாம்.
  • 1024 பைட்டுகளின் இடையக அளவு பயன்படுத்தப்பட்டுள்ளதால், உரை கோப்பு வாடிக்கையாளர் பக்கத்தில் குறுகியதாக இருக்க வேண்டும்.

தேவைகளை அமைக்கவும்:

  • இந்த நிரலை முயற்சிக்க எங்களுக்கு குறைந்தது ஒரு லினக்ஸ் அமைப்பு தேவை. ஆனால் நெட்வொர்க் மூலம் இணைக்கப்பட்ட இரண்டு வெவ்வேறு லினக்ஸ் அமைப்புகளைப் பயன்படுத்த பரிந்துரைக்கப்படுகிறது.
  • ஈத்தர்நெட் அல்லது வைஃபை அல்லது வேறு ஏதேனும் இணைப்புகள் மூலம் இரண்டு அமைப்புகள் இணைக்கப்பட வேண்டும்.

சர்வர் மூல குறியீடு:

https://github.com/linuxhintcode/websamples/blob/master/python_send_file/server.py

வாடிக்கையாளர் மூல குறியீடு:

https://github.com/linuxhintcode/websamples/blob/master/python_send_file/client.py

நிரல்கள் மற்றும் எதிர்பார்த்த வெளியீட்டை எவ்வாறு இயக்குவது:

நிரலை செயல்படுத்துவதற்கான படிகள் இங்கே.

படி 1: B_server அமைப்புக்கு சென்று ஒரு முனையத்தைத் திறக்கவும். ஒரு முனையத்தைத் திறக்க குறுக்குவழி உள்ளது Alt+Ctrl+t.

படி 2: இப்போது server.py இருக்கும் பாதையில் செல்லுங்கள்.

படி 3: இப்போது கீழே உள்ளவாறு server.py ஐ இயக்கவும்

பைதான் 3 சர்வர்.பை

பிழைகள் இருக்கக் கூடாது மற்றும் கீழே உள்ள பிரிண்ட்களைப் பார்க்கவும்

சர்வர் போர்ட்டில் பட்டியலிடுகிறது: 9898

நகலெடுக்கப்பட்ட கோப்பு பெயர் recv.txt சேவையக பக்கத்தில் இருக்கும்

படி 4: இப்போது A_client கணினியில் முனையத்தைத் திறக்கவும்.

படி 5: client.py மற்றும் மாதிரி. Txt இருக்கும் பாதைக்குச் செல்லவும்.

படி 6: இப்போது கீழே உள்ளவாறு client.py ஐ இயக்கவும்

பைதான் 3 வாடிக்கையாளர்.பை <B_server அமைப்பு IP>

சேவையகத்தின் ஐபி முகவரியை நாம் தெரிந்து கொள்ள வேண்டும் என்பதை நாங்கள் கவனித்தோம். B_server அமைப்பின் IP முகவரியை அறிய நாம் கீழே உள்ள கட்டளையை இயக்கலாம்.

ifconfig

இப்போது A_client அமைப்பின் வெளியீடு இப்படி இருக்க வேண்டும்

###########################################################
| --------------------------------- |
வணக்கம் வாடிக்கையாளர்[ஐபி முகவரி: 192.168.1.102],
** சேவையகத்திற்கு வரவேற்கிறோம் **
சர்வர்
| --------------------------------- |

படி 7: இப்போது B_server க்கு சென்று கீழே உள்ள வெளியீட்டைப் பார்க்கவும்

கோப்பு வெற்றிகரமாக நகலெடுக்கப்பட்டது
சேவையகம் இணைப்பை மூடியது

படி 8: சர்வர் கோப்புறையில் recv.txt என்ற ஒரு கோப்பு பெயர் இருக்க வேண்டும். இந்த recv.txt இன் உள்ளடக்கம் அதே மாதிரி. Txt ஆக இருக்க வேண்டும்.

எனவே பைதான் புரோகிராம் மூலம் நெட்வொர்க் மூலம் க்ளையண்டிலிருந்து சர்வர் வரை ஒரு கோப்பை வெற்றிகரமாக நகலெடுத்துள்ளோம்.

குறியீடு விளக்கங்கள்:

இரண்டு மலைப்பாம்பு கோப்புகள் உள்ளன server.py மற்றும் client.py .

எந்த குறியீடும் server.py மற்றும் client.py க்குள் ஒரே மாதிரியாக இருந்தால் ஒருமுறை விளக்குவோம் என்பதை நினைவில் கொள்க.

  1. server.py:
#!/usr/bin/env python3

இது ஷெபாங் வரி, அதாவது இயல்பாக இந்த server.py பைதான் 3 ஐப் பயன்படுத்த வேண்டும். இந்த வரியின் ஒரு நன்மையைப் பார்ப்போம்.

நாங்கள் server.py அல்லது client.py போன்றவற்றை செயல்படுத்தியுள்ளோம் மலைப்பாம்பு 3. இப்போது பைதான் 3 ஐப் பயன்படுத்தாமல் நாம் பைதான் கோப்பை இயக்கலாம். கீழே உள்ள கட்டளைகளை பின்பற்றவும்

சூப்பர் பயனர் பயன்முறைக்குச் செல்லவும்:

அதன்

.Py கோப்பிற்கு அனைத்து அனுமதியையும் கொடுங்கள்:

chmod777சர்வர்பை

Server.py ஐ இயக்கவும்:

./ சர்வர்.பை இறக்குமதி சாக்கெட்
இறக்குமதி செய்தல்சாக்கெட்பைதான் திட்டத்தில் நூலகம்எனநாங்கள் போய்கொண்டு இருக்கிறோம்
உபயோகிக்கசாக்கெட் க்கானஇணைப்பு

கள் = சாக்கெட்.சாக்கெட்()

நாங்கள் ஒரு பொருளை உருவாக்குகிறோம் கள் சாக்கெட் அனைத்து முறைகள் அணுக. இது ஒரு OOP களின் கருத்து.

போர்ட்= 9898

சர்வர் கேட்கும் ஒரு போர்ட்டை இப்போது தேர்வு செய்கிறோம். இதற்கு பதிலாக நாம் முன்பதிவு செய்யப்படாத துறைமுகத்தைப் பயன்படுத்தலாம்.

கள்கட்டுதல்(('',போர்ட்))

சர்வர் ஐபி முகவரியை அந்த போர்ட்டுடன் பிணைக்க பிண்ட் முறையைப் பயன்படுத்துகிறோம் [9898]. ஒரு அவதானிப்பு என்னவென்றால், பிணைப்பு முறையின் முதல் வாதத்திற்கு பதிலாக நாங்கள் சர்வரின் சரியான ஐபி முகவரியைப் பயன்படுத்தியிருக்கலாம் ஆனால் இந்த வேலை நன்றாக இருப்பதால் நாங்கள் காலியாக இருப்பதைத் தேர்வு செய்கிறோம்.

கள்கட்டுதல்((ஐபி முகவரி,போர்ட்))
கோப்பு = திறந்த('recv.txt', 'wb')

எழுதும் முறைக்கு சேவையகத்தில் recv.txt என்ற ஒரு கோப்பு பெயரைத் திறந்து கோப்பு சுட்டிக்காட்டியைப் பெற்றுள்ளோம். வாடிக்கையாளரிடமிருந்து ஒரு உரை கோப்பை நாம் நகலெடுக்க வேண்டும் என்பதால் இது தேவைப்படுகிறது.

போது உண்மை:

அந்த 9898 போர்ட்டில் ஒரு வாடிக்கையாளர் சேவையகத்துடன் தொடர்பு கொள்ளும் வரை காத்திருப்பது சேவையகத்தின் வேலையாக இருப்பதால் எல்லையற்ற ஒன்றைத் தொடங்குவோம். எனவே இந்த சுழற்சி தேவைப்படுகிறது.

இணை,சேர்=கள்ஏற்றுக்கொள்()

இந்த குறியீடு வாடிக்கையாளரிடமிருந்து எந்த உள்வரும் இணைப்புக் கோரிக்கையையும் ஏற்கும். கான் பயன்படுத்துவார் இணை வாடிக்கையாளருடன் தொடர்பு கொள்ள மற்றும் சேர் போர்ட் 9898 இல் இந்த சேவையகத்திற்கு சலசலப்பு கோரிக்கையை அனுப்பிய வாடிக்கையாளரின் ஐபி முகவரி.

msg= ' n n| --------------------------------- | nஹாய் வாடிக்கையாளர் [ஐபி முகவரி:
'
+ சேர்[0]+'], n** சேவையகத்திற்கு வரவேற்கிறோம் ** nசர்வர் n
| --------------------------------- | n n n'

இந்த குறியீடு வாடிக்கையாளருக்கு அனுப்ப ஒரு செய்தியை உருவாக்குவதாகும். இந்த செய்தி வாடிக்கையாளர் முனையத்தில் அச்சிடப்பட வேண்டும். வாடிக்கையாளர் சேவையகத்துடன் தொடர்பு கொள்ள முடியும் என்பதை இது உறுதிப்படுத்துகிறது.

இணைஅனுப்பு(msgகுறியாக்கம்())

இப்போது எங்களிடம் செய்தி தயாராக உள்ளது, பின்னர் அதைப் பயன்படுத்தி வாடிக்கையாளருக்கு அனுப்பவும் இணை இந்த குறியீடு உண்மையில் வாடிக்கையாளருக்கு செய்தி அனுப்புகிறது.

RecvData=இணைrecv(1024)

இந்த குறியீடு வாடிக்கையாளர் தரப்பில் இருந்து அனுப்பப்படும் எந்த தரவையும் பெறுகிறது. எங்கள் விஷயத்தில் நாங்கள் மாதிரி. Txt இன் உள்ளடக்கத்தை எதிர்பார்க்கிறோம் RecvData .

போதுRecvData:

RecvData நிபந்தனையுடன் இன்னும் ஒரு முறை சுழற்சி காலியாக இல்லை. எங்கள் விஷயத்தில் அது காலியாக இல்லை.

கோப்பு.எழுது(RecvData)

ஒருமுறை எங்களிடம் உள்ளடக்கம் இருக்கிறது RecvData பின்னர் நாங்கள் அந்த கோப்பில் எழுதுகிறோம் recv.txt கோப்பு சுட்டிக்காட்டி பயன்படுத்தி கோப்பு.

RecvData=இணைrecv(1024)

வாடிக்கையாளரிடமிருந்து ஏதேனும் தரவு இருந்தால் மீண்டும் பெற முயற்சிக்கிறேன். ஒருமுறை RecvData தரவு இல்லை போது குறியீடு சுழற்சியை உடைக்கும்.

கோப்பு.நெருக்கமான()

நாங்கள் கோப்பு எழுத்தை முடித்தவுடன் இது கோப்பு சுட்டிக்காட்டியை மூடும்.

இணைநெருக்கமான()

இது வாடிக்கையாளருடனான தொடர்பை மூடும்.

இடைவேளை

இது B_server இல் உள்ள எல்லையற்ற அதே நேரத்தில் வளையத்திலிருந்து வெளியே வர வேண்டும்.

  1. client.py:
இறக்குமதி sys

நாம் பைத்தானில் வாத வசதியைப் பயன்படுத்த விரும்புவதால் sys நூலகத்தை இறக்குமதி செய்தல்.

என்றால் (லென்(sys.argv) > 1):
சர்வர்ஐப்= sys.argv[1]
வேறு:
அச்சு(' n nபோல் ஓடு npython3 client.py n n')
வெளியேறு(1)

கோப்பு பெயர் client.py க்குப் பிறகு B_server இன் IP முகவரியை நாம் இயக்கும் போது அனுப்பும்போது, ​​அந்த சேவையக IP முகவரியை வாடிக்கையாளருக்குள் பிடிக்க வேண்டும்.

... சர்வர்ஐபி.

பயனர் குறைந்தபட்சம் ஒரு வாதக் குறியீட்டைக் கடக்கவில்லை என்றால் உதவி மற்றும் குறியீட்டிலிருந்து வெளியே வருவார்.

போர்ட்= 9898

இது B_server பக்கத்தில் குறிப்பிட்டுள்ள அதே துறைமுகமாக இருக்க வேண்டும்.

கள்இணை((சர்வர்ஐப்,போர்ட்))

இந்த குறியீடு அந்த போர்ட்டுடன் சர்வர் ஐபிக்கு டிசிபி இணைப்பைச் செய்யும். இந்த பொன்னிங்கில் ஏதேனும் தவறு ஏற்பட்டால் அது தோல்வியில் முடிவடையும்.

கோப்பு = திறந்த('மாதிரி. உரை', 'ஆர்பி')

உள்ளடக்கத்தை மட்டுமே படிக்க மாதிரி.txt ஐ வாசிப்பு முறையில் திறக்கிறோம்.

அனுப்பு தரவு= கோப்பு.படி(1024)

கோப்பின் உள்ளடக்கத்தைப் படித்து உள்ளே வைப்பது அனுப்பு தரவு மாறி.

போதுஅனுப்பு தரவு:

நாம் ஒரு சுழற்சியைத் தொடங்குகிறோம் என்றால் அனுப்பு தரவு தரவு உள்ளது. எங்கள் விஷயத்தில் மாதிரி.டெக்ஸ்ட் காலியாக இல்லை என்றால் அதில் தரவு இருக்க வேண்டும்.

கள்அனுப்பு(அனுப்பு தரவு)

இப்போது நாம் உள்ளடக்கத்தை அனுப்ப முடியும் மாதிரி. txt சாக்கெட் பொருளைப் பயன்படுத்தி சேவையகத்திற்கு கள்

அனுப்பு தரவு= கோப்பு.படி(1024)

மீதமுள்ள ஏதாவது இருந்தால் மீண்டும் படிக்கவும். எனவே கோப்பில் இருந்து படிக்க எதுவும் இருக்காது அனுப்பு தரவு காலியாக இருக்கும் மற்றும் அது சுழற்சியில் இருந்து வெளியே வரும்.

கள்நெருக்கமான()

இது வாடிக்கையாளர் பக்கத்திலிருந்து இணைப்பை மூடவில்லை.

உபுண்டு ஸ்கிரீன்ஷாட் சர்வர் பக்கம்

உபுண்டு ஸ்கிரீன் ஷாட்கள் கிளையன்ட் பக்கம்

சோதிக்கப்பட்ட சேர்க்கைகள்:

  • சேவையகமாக லினக்ஸ் மற்றும் வாடிக்கையாளராக லினக்ஸ்: பாஸ்
  • லினக்ஸ் வாடிக்கையாளராகவும் லினக்ஸ் சேவையகமாகவும்: பாஸ்
  • சேவையகமாக லினக்ஸ் மற்றும் வாடிக்கையாளராக விண்டோஸ் 10: பாஸ்
  • லினக்ஸ் வாடிக்கையாளராகவும் விண்டோஸ் 10 சேவையகமாகவும்: பாஸ்

சர்வர் மற்றும் வாடிக்கையாளருக்கு இரண்டு லினக்ஸ் அமைப்புகளைப் பயன்படுத்த வேண்டும் என்பது பரிந்துரை.

எதிர்பார்க்கப்படும் பிழைகள்:

  1. 9898 போர்ட்டில் சர்வர் இயங்கவில்லை என்றால் கீழே உள்ள பிழையைக் காணலாம்

டிரேஸ்பேக் (மிக சமீபத்திய அழைப்பு கடைசியாக):

கோப்பு'client.py',வரி22, இல் <தொகுதி>
கள்இணை((சர்வர்ஐப்,போர்ட்))
இணைப்பு மறுக்கப்பட்ட பிழை:[எர்னோ111]இணைப்பு மறுக்கப்பட்டது
  1. கிளையன்ட் பக்கத்தில் ஐபி முகவரி அனுப்பப்படாவிட்டால் கீழே உள்ள பிழை காணப்படுகிறது

போல் ஓடு

பைதான் 3 வாடிக்கையாளர்.பை <சர்ரிப் முகவரி>
  1. 1 என்றால் கீழே உள்ள பிழை காணப்படுகிறதுஸ்டம்ப்வாடிக்கையாளர் பக்கத்தில் உள்ள வாதம் ஒரு ஐபி முகவரி அல்ல

டிரேஸ்பேக் (மிக சமீபத்திய அழைப்பு கடைசியாக):

கோப்பு'client.py',வரி22, இல் <தொகுதி>
கள்இணை((சர்வர்ஐப்,போர்ட்))
சாக்கெட்.கைரேர்:[எர்னோ -2]பெயர்அல்லதுசேவைஇல்லைதெரியும்
  1. 98980 போர்ட் பயன்படுத்தினால் கீழே உள்ள பிழை காணப்படுகிறது

டிரேஸ்பேக் (மிக சமீபத்திய அழைப்பு கடைசியாக):

கோப்பு'client.py',வரி22, இல் <தொகுதி>
கள்இணை((சர்வர்ஐப்,போர்ட்))
வழிதல் பிழை: getsockaddrarg: துறைமுகம் இருக்க வேண்டும்0-65535.
  1. மாதிரி. Txt கிளையன்ட் பக்கத்தில் இல்லை என்றால் கீழே உள்ள பிழை காணப்படுகிறது.

டிரேஸ்பேக் (மிக சமீபத்திய அழைப்பு கடைசியாக):

கோப்பு'client.py',வரி25, இல் <தொகுதி>
கோப்பு = திறந்த('மாதிரி. உரை', 'ஆர்பி')
FileNotFoundError:[எர்னோ2]அத்தகையதல்லகோப்பு அல்லதுஅடைவு:'மாதிரி. உரை'

முடிவுரை:

இந்த நிரலைப் பயன்படுத்தி நாம் ஒரு கணினியிலிருந்து மற்றொரு கணினிக்கு எளிய உரை கோப்பை பித்தன் நிரலைப் பயன்படுத்தி நெட்வொர்க் மூலம் அனுப்பலாம். இது பித்தன் மற்றும் சாக்கெட் புரோகிராமிங் பற்றிய அடிப்படை கற்றலை நெட்வொர்க்கில் தரவை அனுப்ப உதவுகிறது.