Trong bài viết này, chúng ta sẽ xem cách tạo hệ thống phòng trò chuyện máy chủ và máy khách bằng Lập trình Socket với Python
Ổ cắm là điểm cuối của bất kỳ kênh liên lạc nào. Chúng được sử dụng để kết nối máy chủ và máy khách. Ổ cắm là Bi-Directional. Trong khu vực này, chúng tôi sẽ thiết lập các ổ cắm cho mỗi đầu và thiết lập hệ thống phòng trò chuyện giữa các máy khách khác nhau thông qua máy chủ. Phía máy chủ có một số cổng để kết nối với ổ cắm máy khách. Khi khách hàng cố gắng kết nối với cùng một cổng, thì kết nối sẽ được thiết lập cho phòng trò chuyện
Về cơ bản có hai phần. Phía máy chủ và phía máy khách. Khi tập lệnh phía máy chủ đang chạy, nó sẽ đợi mọi yêu cầu kết nối đang hoạt động. 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 tôi đang sử dụng localhost. Nếu các máy được kết nối qua mạng LAN, thì chúng ta có thể sử dụng địa chỉ IP để liên lạc. Máy chủ sẽ hiển thị IP của nó và yêu cầu đặt tên cho máy chủ. Từ phía máy khách, chúng tôi phải đề cập đến một cái tên và cả địa chỉ IP của máy chủ để kết nối
Trong ngôn ngữ Python, socket [hay socket mạng] là một module dùng để giao tiếp giữa hai máy tính. Nó cung cấp hai loại giao diện để truy cập mạng, cụ thể là cấp thấp [kết nối phụ thuộc vào nền tảng — Ví dụ. Telnet] và cấp cao [các kết nối phụ thuộc vào ứng dụng — Ví dụ. HTTP, FTP, SMTP, v.v. ]. Đây là một hướng dẫn đơn giản để thiết lập kết nối ổ cắm cấp thấp giữa máy chủ và máy khách để truyền thông điệp bằng giao thức TCP/IP
Trò chuyện máy chủ và máy khách
Trong hướng dẫn này, tôi đã sử dụng hai script server. py để phục vụ dữ liệu bằng cách gửi lời mời đến máy khách và máy khách. py để nhận dữ liệu về việc chấp nhận lời mời. Sau khi chấp nhận lời mời, cả máy chủ và máy khách đều chia sẻ thông báo lẫn nhau
- Người phục vụ -
Tập lệnh máy chủ thực hiện chuỗi các chức năng như socket[]
,
# client.py
import time, socket, sys
print["\nWelcome to Chat Room\n"]
print["Initialising....\n"]
time.sleep[1]
s = socket.socket[]
shost = socket.gethostname[]
ip = socket.gethostbyname[shost]
print[shost, "[", ip, "]\n"]
host = input[str["Enter server address: "]]
name = input[str["\nEnter your name: "]]
port = 1234
print["\nTrying to connect to ", host, "[", port, "]\n"]
time.sleep[1]
s.connect[[host, port]]
print["Connected...\n"]
s.send[name.encode[]]
s_name = s.recv[1024]
s_name = s_name.decode[]
print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"]
while True:
message = s.recv[1024]
message = message.decode[]
print[s_name, ":", message]
message = input[str["Me : "]]
if message == "[e]":
message = "Left chat room!"
s.send[message.encode[]]
print["\n"]
break
s.send[message.encode[]]
0, # client.py
import time, socket, sys
print["\nWelcome to Chat Room\n"]
print["Initialising....\n"]
time.sleep[1]
s = socket.socket[]
shost = socket.gethostname[]
ip = socket.gethostbyname[shost]
print[shost, "[", ip, "]\n"]
host = input[str["Enter server address: "]]
name = input[str["\nEnter your name: "]]
port = 1234
print["\nTrying to connect to ", host, "[", port, "]\n"]
time.sleep[1]
s.connect[[host, port]]
print["Connected...\n"]
s.send[name.encode[]]
s_name = s.recv[1024]
s_name = s_name.decode[]
print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"]
while True:
message = s.recv[1024]
message = message.decode[]
print[s_name, ":", message]
message = input[str["Me : "]]
if message == "[e]":
message = "Left chat room!"
s.send[message.encode[]]
print["\n"]
break
s.send[message.encode[]]
1 và # client.py
import time, socket, sys
print["\nWelcome to Chat Room\n"]
print["Initialising....\n"]
time.sleep[1]
s = socket.socket[]
shost = socket.gethostname[]
ip = socket.gethostbyname[shost]
print[shost, "[", ip, "]\n"]
host = input[str["Enter server address: "]]
name = input[str["\nEnter your name: "]]
port = 1234
print["\nTrying to connect to ", host, "[", port, "]\n"]
time.sleep[1]
s.connect[[host, port]]
print["Connected...\n"]
s.send[name.encode[]]
s_name = s.recv[1024]
s_name = s_name.decode[]
print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"]
while True:
message = s.recv[1024]
message = message.decode[]
print[s_name, ":", message]
message = input[str["Me : "]]
if message == "[e]":
message = "Left chat room!"
s.send[message.encode[]]
print["\n"]
break
s.send[message.encode[]]
2 [lặp lại cho nhiều máy khách] để giao tiếp với máy khách. Mô tả của từng chức năng được sử dụng trong tập lệnh máy chủ được đưa ra bên dướisocket[]
– tạo ổ cắm bằng cách sử dụng họ địa chỉ, loại ổ cắm và giao thức
0 – liên kết ổ cắm với địa chỉ đã cho [tên máy chủ và cặp số cổng]# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
1 – cho phép máy chủ chấp nhận kết nối từ [các] máy khách# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
2 – chờ và chấp nhận yêu cầu kết nối từ [các] máy khách# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
0 – lấy tên máy chủ của máy# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
1 – dịch tên máy chủ sang địa chỉ định dạng IPv4# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
2 – nhận tin nhắn được gửi qua TCP# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
3 – giải mã tin nhắn bằng codec# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
4 – gửi tin nhắn được gửi qua TCP# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
Mã nguồn
# server.py
import time, socket, sys
print["\nWelcome to Chat Room\n"]
print["Initialising....\n"]
time.sleep[1]
s = socket.socket[]
host = socket.gethostname[]
ip = socket.gethostbyname[host]
port = 1234
s.bind[[host, port]]
print[host, "[", ip, "]\n"]
name = input[str["Enter your name: "]]
s.listen[1]
print["\nWaiting for incoming connections...\n"]
conn, addr = s.accept[]
print["Received connection from ", addr[0], "[", addr[1], "]\n"]
s_name = conn.recv[1024]
s_name = s_name.decode[]
print[s_name, "has connected to the chat room\nEnter [e] to exit chat room\n"]
conn.send[name.encode[]]
while True:
message = input[str["Me : "]]
if message == "[e]":
message = "Left chat room!"
conn.send[message.encode[]]
print["\n"]
break
conn.send[message.encode[]]
message = conn.recv[1024]
message = message.decode[]
print[s_name, ":", message]
- Khách hàng -
Tập lệnh máy khách thực hiện chuỗi các chức năng như socket[]
và
# client.py
import time, socket, sys
print["\nWelcome to Chat Room\n"]
print["Initialising....\n"]
time.sleep[1]
s = socket.socket[]
shost = socket.gethostname[]
ip = socket.gethostbyname[shost]
print[shost, "[", ip, "]\n"]
host = input[str["Enter server address: "]]
name = input[str["\nEnter your name: "]]
port = 1234
print["\nTrying to connect to ", host, "[", port, "]\n"]
time.sleep[1]
s.connect[[host, port]]
print["Connected...\n"]
s.send[name.encode[]]
s_name = s.recv[1024]
s_name = s_name.decode[]
print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"]
while True:
message = s.recv[1024]
message = message.decode[]
print[s_name, ":", message]
message = input[str["Me : "]]
if message == "[e]":
message = "Left chat room!"
s.send[message.encode[]]
print["\n"]
break
s.send[message.encode[]]
6 để giao tiếp với máy chủ. Mô tả của từng chức năng được sử dụng trong tập lệnh máy chủ được đưa ra bên dướisocket[]
– tạo ổ cắm bằng cách sử dụng họ địa chỉ, loại ổ cắm và giao thức
6 – kết nối với ổ cắm máy chủ tại địa chỉ# client.py import time, socket, sys print["\nWelcome to Chat Room\n"] print["Initialising....\n"] time.sleep[1] s = socket.socket[] shost = socket.gethostname[] ip = socket.gethostbyname[shost] print[shost, "[", ip, "]\n"] host = input[str["Enter server address: "]] name = input[str["\nEnter your name: "]] port = 1234 print["\nTrying to connect to ", host, "[", port, "]\n"] time.sleep[1] s.connect[[host, port]] print["Connected...\n"] s.send[name.encode[]] s_name = s.recv[1024] s_name = s_name.decode[] print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"] while True: message = s.recv[1024] message = message.decode[] print[s_name, ":", message] message = input[str["Me : "]] if message == "[e]": message = "Left chat room!" s.send[message.encode[]] print["\n"] break s.send[message.encode[]]
Mã nguồn
# client.py
import time, socket, sys
print["\nWelcome to Chat Room\n"]
print["Initialising....\n"]
time.sleep[1]
s = socket.socket[]
shost = socket.gethostname[]
ip = socket.gethostbyname[shost]
print[shost, "[", ip, "]\n"]
host = input[str["Enter server address: "]]
name = input[str["\nEnter your name: "]]
port = 1234
print["\nTrying to connect to ", host, "[", port, "]\n"]
time.sleep[1]
s.connect[[host, port]]
print["Connected...\n"]
s.send[name.encode[]]
s_name = s.recv[1024]
s_name = s_name.decode[]
print[s_name, "has joined the chat room\nEnter [e] to exit chat room\n"]
while True:
message = s.recv[1024]
message = message.decode[]
print[s_name, ":", message]
message = input[str["Me : "]]
if message == "[e]":
message = "Left chat room!"
s.send[message.encode[]]
print["\n"]
break
s.send[message.encode[]]
Các bước thực hiện
1. Chạy máy chủ. tập lệnh py trong ứng dụng Python
2. Ghi lại địa chỉ IP cục bộ và chuyển nó cho khách hàng [thư mời]. Ngoài ra, bạn cũng có thể lấy địa chỉ IP cục bộ thông qua trực tuyến bằng công cụ L-IP
3. Chạy ứng dụng khách. py trong ứng dụng Python sử dụng địa chỉ IP cục bộ do máy chủ gửi [chấp nhận lời mời]