• Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC
AnonyViet
  • Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC
No Result
View All Result
  • Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC
No Result
View All Result
AnonyViet
No Result
View All Result

Cách viết ứng dụng chat đơn giản bằng Python

Elyx13 by Elyx13
15/10/2020 - Updated on 16/10/2020
in Code
Reading Time: 6 mins read
A A
11

Mục lục bài viết

  1. Socket là gì?
  2. Cấu trúc dự án
  3. Giới thiệu về lập trình socket
  4. Tạo socket đầu tiên (nodes)
  5. Tạo nodes Server
    1. Tạo file Server.py
    2. Giải thích code
      1. Gán địa chỉ IP và Port
      2. Lắng nghe kết nối
      3. Hàm send_sms()
      4. Hàm receive_sms( )
      5. Hàm Main()
      6. Gọi hàm
  6. Tạo nodes Client
    1. Tạo file Client.py

Trong bài viết này, mình sẽ hướng dẫn các bạn cách xây dựng một ứng dụng chat command line trong Python bằng thư viện socket. Nếu bạn chưa biết socket là gì, thì cũng đừng lo lắng. Mình sẽ giải thích nó ngay thôi.

viet ung dung chat bang python

Các bài viết liên quan

Cách đóng gói code Python 7

Cách đóng gói code Python

25/04/2022
Sử dụng httpx như một trình duyệt Web của Python 8

Sử dụng httpx như một trình duyệt Web của Python

03/04/2022
top 3 website hoc lap trinh web tot nhat

Top 4 Website học lập trình Web miễn phí tốt nhất trong năm 2022

29/03/2022
godot lap trinh game

Có nên học Godot Engine để lập trình Game không?

15/03/2022 - Updated on 17/03/2022

Socket là gì?

Sockets là hai điểm cuối (end points) có thể giao tiếp với nhau trên cùng một máy tính hoặc trên các thiết bị không dây.

Socket chính là xương sống của hệ thống Internet, trong sâu thẳm tất cả những giao tiếp mà chúng ta thấy ngày nay đều hoạt động từ giao tiếp điểm này đến điểm khác.

Lập trình socket là cách làm cho hai node trên mạng giao tiếp với nhau. Một socket lắng nghe trên một cổng cụ thể tại một IP (máy chủ), trong khi một socket khác kết nối với socket kia để tạo kết nối (máy khách).

Các mô-đun socket đều mặc định có sẵn trong thư viện của Python. Do đó, bạn không cần phải cài đặt bất kỳ thư viện nào nữa.

Cấu trúc dự án

Như cách giải thích ở trên, socket là các node có thể giao tiếp với nhau. Và trong dự án này, chúng ta sẽ triển khai 2 nodes bằng cách sử dụng socket, một là server và một là client.

Hai node đó sẽ gửi tin nhắn cho nhau như một ứng dụng chat bình thường.

Giới thiệu về lập trình socket

Mở command prompt và chạy thử các lệnh dưới đây.

Python 3.5.3 (default, Sep 27 2018, 17:25:39) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket 
>>> socket.gethostname() #getting our local host name
'kalebu-PC'
>>> socket.gethostbyname('www.google.com') #getting IP of Google 
'172.217.170.4'

Như chúng ta thấy trong ví dụ trên, các bạn có thể lấy tên host của mình bằng phương thức gethostname và lấy địa chỉ IP của Google bằng phương thức gethostbyname.

Tạo socket đầu tiên (nodes)

Có rất nhiều giao thức truyền thông được sử dụng ngoài kia, tùy thuộc vào nơi nó đang được áp dụng, chẳng hạn như Transmission communication Protocol (TCP), User Datagram Protocol (UDP), File transfer Protocol (FTP),…

Để tạo ứng dụng Chat, các bạn sẽ sử dụng giao thức Transmission communication protocol (TCP). Nếu bạn không hiểu về giao thức này thì cũng không sao cả.

Để tạo một sockets (nodes) trong Python cho TCP, chúng ta sẽ cần các tham số chính sau đây:

  • socket.AF_INET nghĩa là socket thuộc IPv4..
  • socket.SOCK_STREAM nghĩa là kết nối được cấu hình bằng TCP Protocol

Tạo một socket trong python:

>>> import socket 
>>> node = socket.socket(socket.AF_INET, socket.SOCK_SaTREAM)

Nodes ở trên hoạt động như client hoặc server trên ứng dụng chat của chúng ta, tất cả phụ thuộc vào cách chúng ta cấu hình nó, vì chúng ta sẽ tạo 2 ứng dụng, đầu tiên chúng ta cần tạo nodes server.

Tạo nodes Server

Mình là người lập trình hướng đối tượng (OPP). Do đó, mình sẽ triển khai nodes server dưới dạng class.

Vì mình đang xây dựng nodes này như một server, nên mình sẽ thêm một số chức năng cho phép nodes này lắng nghe yêu cầu kết nối đến.

Tạo file Server.py

import socket 
import threading

class ServerNode:
    def __init__(self):
        self.node = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        port_and_ip = ('127.0.0.1', 12345)
        self.node.bind(port_and_ip)
        self.node.listen(5)
        self.connection, addr = self.node.accept()

    def send_sms(self, SMS):
        self.connection.send(SMS.encode())

    def receive_sms(self):
        while True:
            data = self.connection.recv(1024).decode()
            print(data)

    def main(self):
        while True:
            message = input()
            self.send_sms(message)

server = ServerNode()
always_receive = threading.Thread(target=server.receive_sms)
always_receive.daemon = True
always_receive.start()
server.main()

Giải thích code

Gán địa chỉ IP và Port

port_and_ip = ('127.0.0.1', 12345)
self.node.bind(port_and_ip)

Việc ràng buộc địa chỉ IP và port với nodes của chúng ta giống như mình đang sử dụng chìa khoá IP để vào phòng của port nơi node server sống. Do đó, client phải cần chìa khoá IP này để kết nối với server.

Có nghĩa là node client phải truy cập chính xác IP server và port để kết nối với nodes server. Trong bản demo này, mình sẽ thực hiện kết nối trên một máy nhưng bạn cũng có thể thực hiện trong mạng được kết nối bằng cách thay đổi địa chỉ IP.

Lắng nghe kết nối

self.node.listen(5)
self.connection, addr = self.node.accept()

Nodes server sẽ lắng nghe kết nối đến và sau đó chấp nhận kết nối này.

Hàm send_sms()

def send_sms(self, SMS):
    self.connection.send(SMS.encode())

Phương thức này dùng để gửi tin nhắn khi được kết nối, tin nhắn phải ở dạng byte trong quá trình truyền, do đó tại sao chúng ta lại sử dụng phương thức encode () trên chuỗi.

Hàm receive_sms( )

def receive_sms(self):
    while True:
        data = self.connection.recv(1024).decode()
        print(data)

Hàm này được sử dụng để nhận thông báo từ client trong suốt lúc chương trình hoạt động, nó sẽ được phân luồng để ngăn ứng dụng bị đơ/lag.

Hàm Main()

def receive_sms(self):
    while True:
        data = self.connection.recv(1024).decode()
        print(data)

Hàm này được sử dụng để hiển nhập tin nhắn từ server và gửi nó đến client.

Gọi hàm

server = ServerNode()
always_receive = threading.Thread(target=server.receive_sms)
always_receive.daemon = True
always_receive.start()
server.main()

5 dòng code trên là để tạo server và sau đó chạy nó bằng cách phân luồng các hàm nhận (hàm receive_sms).

Tạo nodes Client

Hầu hết mọi thứ trên node client đều tương tự như node server ngoại trừ thực tế là node client đang kết nối với server thay vì lắng nghe kết nối.

Tạo file Client.py

import socket 
import threading

class ClientNode:
    def __init__(self):
        self.node = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        port_and_ip = ('127.0.0.1', 12345)
        self.node.connect(port_and_ip)

    def send_sms(self, SMS):
        self.node.send(SMS.encode())

    def receive_sms(self):
        while True:       
            data = self.node.recv(1024).decode()
            print(data)

    def main(self):
        while True:
            message = input()
            self.send_sms(message)

Client = ClientNode()
always_receive = threading.Thread(target=Client.receive_sms)
always_receive.daemon = True
always_receive.start()
Client.main()

Vậy là xong rồi đó. Để chạy ứng dụng chat, bạn cần chạy file server.py trước rồi mới chạy file client.py.ứng dụng chat bằng Python

Ngoài tạo ứng dụng Chat ra, bạn còn có thể xem bài hướng dẫn tạo ứng dụng tra số điện thoại thuộc quốc gia nào bằng Python của Anonyviet nữa đó.

Tags: codehọc lập trìnhhọc lập trình Pythonlập trìnhpythonứng dụng chat
Previous Post

Danh sách 10 nữ hacker khét tiếng và xinh đẹp nhất thế giới

Next Post

Nhóm Hacker APT của Trung Quốc nhắm mục tiêu vào vào lĩnh vực truyền thông, tài chính và điện tử

Elyx13

Elyx13

Có người không dám bước vì sợ gãy chân, nhưng sợ gãy chân mà không dám bước đi thì khác nào chân đã gãy.

Related Posts

Cách đóng gói code Python 9
Code

Cách đóng gói code Python

25/04/2022
Có nên dùng Unity để lập trình game không? 10
Code

Có nên dùng Unity để lập trình game không?

07/04/2022
Sử dụng httpx như một trình duyệt Web của Python 11
Code

Sử dụng httpx như một trình duyệt Web của Python

03/04/2022
top 3 website hoc lap trinh web tot nhat
Code

Top 4 Website học lập trình Web miễn phí tốt nhất trong năm 2022

29/03/2022
tao website cuoi mien phi
Code

Hướng dẫn tạo Website thông báo đám cưới miễn phí

21/03/2022
godot lap trinh game
Godot

Có nên học Godot Engine để lập trình Game không?

15/03/2022 - Updated on 17/03/2022
Next Post
Nhóm Hacker APT của Trung Quốc nhắm mục tiêu vào vào lĩnh vực truyền thông, tài chính và điện tử 12

Nhóm Hacker APT của Trung Quốc nhắm mục tiêu vào vào lĩnh vực truyền thông, tài chính và điện tử

guest
guest

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.

11 Comments
oldest
newest
Inline Feedbacks
View all comments
Shin Nguyễn
Shin Nguyễn
1 year ago

làm sao để tạo ứng dụng chat với 2 thiết bị khác nhau ad ơi

Reply
AnonyViet
Admin
AnonyViet
1 year ago
Reply to  Shin Nguyễn

bạn khai báo IP đúng là được

Reply
nhung
nhung
1 year ago
Reply to  AnonyViet

2 thiết bị ở 2 modem khác nhau dùng code này được ko ad

Reply
AnonyViet
Admin
AnonyViet
1 year ago
Reply to  nhung

ra ngoài môi trường Internet thì phải VPN về mới chat được

Reply
nhung
nhung
1 year ago
Reply to  AnonyViet

ok! cảm ơn ad rất nhiều

Reply
Lnog
Lnog
5 months ago
Reply to  AnonyViet

vpn sao vậy ad

Reply
Bảo
Bảo
1 year ago

ad ơi, sao khi em code xong và chạy thì nó báo WinError 10048 trong file Server.py, em đã tìm kiếm cách fix trên StackOverflow nhưng không fix được, anh xem có cách nào fix ko ạ!

Reply
AnonyViet
Admin
AnonyViet
1 year ago
Reply to  Bảo

bạn chụp hình lại giúp mình xem

Reply
Elyx13
Author
Elyx13
1 year ago
Reply to  AnonyViet

Bạn inbox page để hỗ trợ cho dễ nhé

Reply
Công
Công
1 year ago

làm sao nổi tên người gửi, người nhận

Reply
Hoi
Hoi
1 year ago

mong ad có thể hưởng dẫn tạo 1 tool chat mà 1 server nhắn tin được với nhiều client

Reply
wpdiscuz   wpDiscuz

Liên hệ Quảng Cáo

Lien he AnonyViet

Đối tác —

Fshare

Các bài mới

25 tính năng "bí mật" ẩn trong công cụ tìm kiếm DuckDuckGo 13

25 tính năng “bí mật” ẩn trong công cụ tìm kiếm DuckDuckGo

27/05/2022
doi icon recycle bin hinh con meo

Cách đổi Icon Thùng rác thành hình con mèo hả mồm

26/05/2022
Cách mở khóa Bootloader trên điện thoại Xiaomi bằng Mi Unlock 14

Cách mở khóa Bootloader trên điện thoại Xiaomi bằng Mi Unlock

26/05/2022
5 Extension Chrome "mờ ám" bạn cần phải xóa ngay 15

5 Extension Chrome “mờ ám” bạn cần phải xóa ngay

25/05/2022
5 Website giúp bạn tìm chủ tài khoản Email là ai 16

5 Website giúp bạn tìm chủ tài khoản Email là ai

24/05/2022

Ads

Giới thiệu

AnonyViet

AnonyViet

Nơi chia sẻ những kiến thức mà bạn chưa từng được học trên ghế nhà trường!

Chúng tôi sẵn sàng đón những ý kiến đóng góp, cũng như bài viết của các bạn gửi đến AnonyViet.

Hãy cùng AnonyViet xây dựng một cộng đồng CNTT lớn mạnh nhất!

Giới thiệu

AnonyViet là Website chia sẻ miễn phí tất cả các kiến thức về công nghệ thông tin. AnonyViet cung cấp mọi giải pháp về mạng máy tính, phần mềm, đồ họa và MMO.

Liên hệ

Email: anonyviet.com[@]gmail.com

1409 Hill Street #01-01A
Old Hill Street Police Station
Singapore 179369

 

Bản quyền: DMCA.com Protection Status

Bài viết mới

  • 25 tính năng “bí mật” ẩn trong công cụ tìm kiếm DuckDuckGo
  • Cách đổi Icon Thùng rác thành hình con mèo hả mồm
  • Cách mở khóa Bootloader trên điện thoại Xiaomi bằng Mi Unlock
  • Cách thắng Game bắn cá
  • 5 Extension Chrome “mờ ám” bạn cần phải xóa ngay
  • 5 Website giúp bạn tìm chủ tài khoản Email là ai

©2022 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về Công nghệ. Google iwin888 Bing tải game iwin Github tải iwin apk Github tải win456 Youtube ku fun wikipedia 88vin reddit twin 567LIVE MMLive SP666 92lottery sun86 stackoverflow

No Result
View All Result
  • Tin tức
  • Network
    • Mạng cơ bản
    • Hyper-V
    • Linux
    • Windown Server 2012
  • Security
    • Basic Hacking
    • Deface
    • Kali Linux / Parrot
    • SQL Injection
  • Thủ thuật
    • Khóa Học Miễn Phí
    • Code
    • Mẹo Vặt Máy Tính
    • Facebook
    • Windows 7/8/10/11
    • Đồ Họa
    • Video
  • Software
    • Phần mềm máy tính
    • Phần mềm điện thoại
  • Tin học văn phòng
  • Kiến thức
  • MMO
    • Advertisers – Publishers
    • Affiliate Program
    • Kiếm tiền bằng điện thoại
    • Pay Per Click – PPC

©2022 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về Công nghệ. Google iwin888 Bing tải game iwin Github tải iwin apk Github tải win456 Youtube ku fun wikipedia 88vin reddit twin 567LIVE MMLive SP666 92lottery sun86 stackoverflow

wpDiscuz
pixel