ในบทความนี้เราจะดูวิธีทำระบบ server และ client chat room โดยใช้ Socket Programming ด้วย Python
Socket คือ endpoints ของช่องสื่อสาร ใช้เชื่อมต่อ server และ client Sockets เป็น Bi-Directional ในส่วนนี้เราจะตั้งค่า sockets สำหรับแต่ละปลายและตั้งค่าระบบ chatroom ระหว่าง clients ต่างๆ ผ่าน server ด้าน server มีพอร์ตบางส่วนเพื่อเชื่อมต่อกับ client sockets เมื่อ client พยายามเชื่อมต่อกับพอร์ตเดียวกัน การเชื่อมต่อจะถูกสร้างขึ้นสำหรับ chat room
มีสองส่วนหลัก คือ ด้าน server และด้าน client เมื่อสคริปต์ฝั่ง server กำลังรัน จะรอคำขอเชื่อมต่อที่ active เมื่อมีการเชื่อมต่อหนึ่งรายการ established สามารถสื่อสารกับมันได้
ในกรณีนี้เราใช้ localhost หากเครื่องเชื่อมต่อผ่าน LAN เราสามารถใช้ IP addresses เพื่อสื่อสารได้ Server จะแสดง IP ของมัน และขอชื่อสำหรับ server จากฝั่ง client เราต้องระบุชื่อ และ IP address ของ server เพื่อเชื่อมต่อ
โค้ดฝั่ง Server
import time, socket, sys
print('Setup Server...')
time.sleep(1)
# Get hostname, IP Address from socket และตั้งค่า Port
soc = socket.socket()
host_name = socket.gethostname()
ip = socket.gethostbyname(host_name)
port = 1234
soc.bind((host_name, port))
print(host_name, '({})'.format(ip))
name = input('Enter name: ')
soc.listen(1)
# พยายาม locate โดยใช้ socket
print('Waiting for incoming connections...')
connection, addr = soc.accept()
print("Received connection from ", addr[0], "(", addr[1], ")\n")
print('Connection Established. Connected From: {}, ({})'.format(addr[0], addr[0]))
# รับการเชื่อมต่อจากฝั่ง client
client_name = connection.recv(1024)
client_name = client_name.decode()
print(client_name + ' has connected.')
print('Press [bye] to leave the chat room')
connection.send(name.encode())
while True:
message = input('Me > ')
if message == '[bye]':
message = 'Good Night...'
connection.send(message.encode())
print("\n")
break
connection.send(message.encode())
message = connection.recv(1024)
message = message.decode()
print(client_name, '>', message)
โค้ดฝั่ง Client
import time, socket, sys
print('Client Server...')
time.sleep(1)
# Get hostname, IP Address from socket และตั้งค่า Port
soc = socket.socket()
shost = socket.gethostname()
ip = socket.gethostbyname(shost)
# รับข้อมูลเพื่อเชื่อมต่อกับ server
server_host = input("Enter server's IP address:")
name = input("Enter Client's name: ")
port = 1234
print('Trying to connect to the server: {}, ({})'.format(server_host, port))
time.sleep(1)
soc.connect((server_host, port))
print("Connected...\n")
soc.send(name.encode())
server_name = soc.recv(1024)
server_name = server_name.decode()
print('{} has joined...'.format(server_name))
print('Enter [bye] to exit.')
while True:
message = soc.recv(1024)
message = message.decode()
print(server_name, ">", message)
message = input(str("Me > "))
if message == "[bye]":
message = "Leaving the Chat room"
soc.send(message.encode())
print("\n")
break
soc.send(message.encode())