Trong bài viết này chúng ta sẽ xem cách tạo hệ thống phòng chat server và client sử dụng Lập trình Socket với Python.
Socket là các điểm cuối của bất kỳ kênh truyền thông nào. Chúng được dùng để kết nối server và client. Socket là Hai chiều (Bi-Directional). Trong khu vực này, chúng ta sẽ thiết lập socket cho mỗi đầu và thiết lập hệ thống phòng chat giữa các client khác nhau thông qua server. Phía server có một số cổng để kết nối với socket client. Khi một client cố gắng kết nối với cùng cổng, thì kết nối sẽ được thiết lập cho phòng chat.
Về cơ bản có hai phần. Phía server và phía client. Khi script phía server đang chạy, nó chờ bất kỳ yêu cầu kết nối hoạt động nào. Khi một kết nối được thiết lập, nó có thể giao tiếp với nó.
Trong trường hợp này chúng ta đang sử dụng localhost. Nếu các máy tính được kết nối qua LAN, thì chúng ta có thể dùng địa chỉ IP để giao tiếp. Server sẽ hiển thị IP của nó, và yêu cầu một tên cho server. Từ phía client, chúng ta phải đề cập một tên, và cũng địa chỉ IP của server để kết nối.
Mã phía Server
import time, socket, sys
print('Setup Server...')
time.sleep(1)
# Lấy hostname, IP Address từ socket và đặt 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)
# Cố gắng định vị sử dụng 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]))
# lấy kết nối từ phía 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)
Mã phía Client
import time, socket, sys
print('Client Server...')
time.sleep(1)
# Lấy hostname, IP Address từ socket và đặt Port
soc = socket.socket()
shost = socket.gethostname()
ip = socket.gethostbyname(shost)
# lấy thông tin để kết nối với 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.')
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())