ในการเปิดไฟล์ที่เป็นไฟล์ไบต์ใน Python จะใช้คำสั่ง
open(file,mode)
โดย mode คือ โหมดในการเปิดไฟล์จะคล้าย ๆ กับการเปิดไฟล์ text ใน Python แต่เพียงเติม b เข้าไป เช่น 'rb' อ่านไฟล์ และ 'wb' เขียนไฟล์ เป็นต้น
ในการเข้าข้อมูลผ่านเครือข่าย อาจจะทำให้การรับส่งข้อมูลไบต์มีปัญหาได้ เพราะเครื่องรับหรือเครื่องส่งข้อมูล อาจมีการเข้ารหัสและถอดรหัสข้อมูลไบต์ไม่เหมือนกัน เราจึงต้องใช้ไลบรารี base64 ในการเข้ารหัสและถอดรหัสข้อมูลไบต์ครับ
เรามาเขียนโปรแกรมกันเลยครับ
ไฟล์
server.py
import socket
import base64
HOST = ''
PORT = 8081 #กำหนดค่าพอร์ตในการสื่อสาร
ADDR = (HOST,PORT) #รวม host กับค่าพอร์ตเข้าเป็น tuple เดียวกัน
BUFSIZE = 1024 #ขนาดบัฟเฟอร์ข้อมูล
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #สร้าง object ในการเชื่อมต่อ socket
serv.bind(ADDR) #เชื่อมต่อ
serv.listen(5) #5 เป็นจำนวนสูงสุดของการเชื่อมต่อคิวที่เราจะอนุญาต
print('listening ...')
while True:
conn, addr = serv.accept() #ยอมรับการเชื่อมต่อ
print('client connected ... ', addr) #แสดงรายละเอียด IP ที่เชื่อมต่อเข้ามา
myfile = open('2.py', 'wb') #เปิดไฟล์และเขียนไฟล์
while True:
data = conn.recv(BUFSIZE) #ดึงข้อมูลที่ส่งมา
if not data: break #หากไม่ใช่ข้อมูลให้หลุดออกจากการลูป
data = base64.b64decode(data) #ถอดรหัส base64
myfile.write(data) #เข้าข้อมูลลงไฟล์
print('writing file ....')
myfile.close() #ปิดไฟล์
print('finished writing file')
conn.close() #ปิดการเชื่อมต่อ
print('client disconnected')
break #ออกจากการลูป
ไฟล์
client.py
import socket
import base64
HOST = 'localhost' #กำหนดค่า host ที่เชื่อมต่อ
PORT = 8081 #กำหนดค่าพอร์ตในการสื่อสาร
ADDR = (HOST,PORT) #รวม host กับค่าพอร์ตเข้าเป็น tuple เดียวกัน
BUFSIZE = 1024 #ขนาดบัฟเฟอร์ข้อมูล
file = "server.py" #ไฟล์ที่ต้องการส่ง
bytes1 = open(file,'rb').read() #อ่านไฟล์ไบต์
bytes1 = base64.b64encode(bytes1) #เข้ารหัส base64
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #สร้าง object ในการเชื่อมต่อ socket
client.connect(ADDR) #เชื่อมต่อ
client.send(bytes1) #ส่งข้อมูล
client.close() #ปิดการเชื่อมต่อ
เวลาใช้งานให้รันไฟล์
server.py
ก่อนครับ เพื่อรอรับข้อมูล แล้วจึงรันไฟล์ client.py
ครับติดตามบทความต่อไปนะครับ
ขอบคุณครับ
ได้ความรูเลยครับ
ตอบลบอยากทรายว่า ถ้าจะเขียนให้มันเชื่อมกับเเลนของเพื่อนอ่ะ ต้องเขียนยังไง สมมุติ เครื่องคอมเราต้องการเชื่อมต่อกับคอมเพื่อนอ่ะค่ะ เเลนต่างกัน
ตอบลบที่ส่งไปลองดูครับ เเลนต่างกัน ยึดของเซอฟเวอร์เป็นหลักครับ เเค่อยู่ในวงเเลนเดียวกันเป็นใช้ได้ครับเลขหน้าเหมือน ต่างกันเเค่3 ตัวท้าย ถ้าผมตอบผิดยังไง น้อมรับคำติชมเเล้วก็ขอคำชี้เเนะด้วยนะครับ (นักศึกษา)
ลบเชื่อต่อผ่าน PUB IP แทนครับ
ลบ