Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ห้องแชทอย่างง่ายโดยใช้ Python


ในบทความนี้เราจะมาดูวิธีการสร้างเซิร์ฟเวอร์และระบบห้องสนทนาของไคลเอ็นต์โดยใช้ Socket Programming ด้วย Python

ซ็อกเก็ตเป็นจุดสิ้นสุดของช่องทางการสื่อสารใดๆ สิ่งเหล่านี้ใช้เพื่อเชื่อมต่อเซิร์ฟเวอร์และไคลเอนต์ ซ็อกเก็ตเป็นแบบ Bi-Directional ในพื้นที่นี้ เราจะตั้งค่าซ็อกเก็ตสำหรับปลายแต่ละด้านและตั้งค่าระบบห้องสนทนาระหว่างไคลเอนต์ต่างๆ ผ่านเซิร์ฟเวอร์ ฝั่งเซิร์ฟเวอร์มีพอร์ตสำหรับเชื่อมต่อกับซ็อกเก็ตไคลเอนต์ เมื่อไคลเอนต์พยายามเชื่อมต่อกับพอร์ตเดียวกัน การเชื่อมต่อจะถูกสร้างขึ้นสำหรับห้องสนทนา

โดยทั่วไปมีสองส่วน ฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ เมื่อสคริปต์ฝั่งเซิร์ฟเวอร์กำลังทำงาน สคริปต์ดังกล่าวจะรอคำขอการเชื่อมต่อที่ใช้งานอยู่ เมื่อสร้างการเชื่อมต่อแล้ว ก็สามารถสื่อสารกับมันได้

ในกรณีนี้เราใช้ localhost หากเครื่องเชื่อมต่อผ่าน LAN เราก็สามารถใช้ที่อยู่ IP เพื่อสื่อสารได้ เซิร์ฟเวอร์จะแสดง IP และถามชื่อเซิร์ฟเวอร์ จากฝั่งไคลเอนต์ เราต้องพูดถึงชื่อและที่อยู่ IP ของเซิร์ฟเวอร์ที่จะเชื่อมต่อด้วย

รหัสฝั่งเซิร์ฟเวอร์

import time, socket, sys
print('Setup Server...')
time.sleep(1)
#Get the hostname, IP Address from socket and set 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) #Try to locate using 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]))
#get a connection from client side
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())
whileTrue:
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)

รหัสฝั่งไคลเอ็นต์

import time, socket, sys
print('Client Server...')
time.sleep(1)
#Get the hostname, IP Address from socket and set Port
soc = socket.socket()
shost = socket.gethostname()
ip = socket.gethostbyname(shost)
#get information to connect with the server
print(shost, '({})'.format(ip))
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.')
whileTrue:
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())