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

Jun Phạm by Jun Phạm
15/10/2020 - Updated on 16/10/2020
in Code
6

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

ung dung nhan tin pho bien signal

Signal là gì? Tại sao bạn nên dùng Signal để nhắn tin

13/01/2021
Các kiểu dữ liệu cơ bản trong Python 7

Các kiểu dữ liệu cơ bản trong Python

12/01/2021
Cách đặt lịch chạy file Batch (CMD) trên Windows 8

Cách đặt lịch chạy file Batch (CMD) trên Windows

02/01/2021
cach tao website onion dark web deep web

Cách tạo Website trên Dark Web và Deep Web

20/12/2020 - Updated on 21/12/2020

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.

Xem thêm:  Tự học lập trình Python với 89 video học online

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.

Xem thêm:  Miễn phí khóa học thiết kế Web chuẩn SEO với Wordpress

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.

Xem thêm:  Hướng dẫn dùng Colab để Download File về Google Drive

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ử

Jun Phạm

Jun Phạm

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ác kiểu dữ liệu cơ bản trong Python 9
Code

Các kiểu dữ liệu cơ bản trong Python

12/01/2021
Top 5 Ngôn Ngữ Lập Trình Hacker Mũ Trắng Nên Học
Code

Top 5 Ngôn Ngữ Lập Trình Hacker Mũ Trắng Nên Học

27/11/2020 - Updated on 30/11/2020
Xoá các File trùng lặp bằng Python
Code

Viết chương trình Xoá các File trùng lặp bằng Python

22/10/2020
ứng dụng tra số điện thoại thuộc Quốc gia nào
Code

Viết ứng dụng tra số điện thoại thuộc Quốc gia nào bằng Python

11/10/2020 - Updated on 13/10/2020
Cách tạo tin nhắn bí mật trong ảnh bằng Python 10
Code

Cách tạo tin nhắn bí mật trong ảnh bằng Python

08/10/2020
Download khóa học Pascal
Code

Download khóa học Pascal Video tiếng Việt cho người mới bắt đầu

11/09/2020 - Updated on 12/09/2020
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ử 11

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.

6 Comments
oldest
newest most voted
Inline Feedbacks
View all comments
Shin Nguyễn | <span class="wpdiscuz-comment-count">13 comments</span>
Shin Nguyễn | 13 comments
2 months ago

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

0
Reply
AnonyViet | <span class="wpdiscuz-comment-count">1521 comments</span>
Admin
AnonyViet | 1521 comments
2 months ago
Reply to  Shin Nguyễn

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

0
Reply
Bảo | <span class="wpdiscuz-comment-count">1 comments</span>
Bảo | 1 comments
2 months 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 ạ!

0
Reply
AnonyViet | <span class="wpdiscuz-comment-count">1521 comments</span>
Admin
AnonyViet | 1521 comments
2 months ago
Reply to  Bảo

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

2
Reply
Jun Phạm | <span class="wpdiscuz-comment-count">16 comments</span>
Author
Jun Phạm | 16 comments
2 months ago
Reply to  AnonyViet

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

0
Reply
Công | <span class="wpdiscuz-comment-count">1 comments</span>
Công | 1 comments
2 months ago

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

0
Reply

Liên hệ Quảng Cáo

Lien he AnonyViet

Đối tác

Fshare

Các bài mới

setup Absorber keylogger

Cách dùng Absorber Keylogger bí mật ghi lại thao tác bàn phím

15/01/2021
leaked db password MOSINT

MOSINT – Tool Truy vết địa chỉ Email để tìm thông tin cá nhân của bất kỳ ai

14/01/2021
kiem tra tin nhan signal

Cách kiểm tra tin nhắn Signal đã an toàn và riêng tư chưa?

14/01/2021
ung dung nhan tin pho bien signal

Signal là gì? Tại sao bạn nên dùng Signal để nhắn tin

13/01/2021
Nên chọn Signal hay Telegram để thay thế WhatsApp trong năm 2021? 12

Nên chọn Signal hay Telegram để thay thế WhatsApp trong năm 2021?

13/01/2021

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 kết

Game B52 |  Tải game đổi thưởng online | Chơi game bài hot 2020 | Chơi game bài đổi thưởng online | Gam Víp | 88vin link

Liên hệ đặt Ads: [email protected]

Liên hệ

Email: anonyviet.com[@]gmail.com

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

Bài viết mới

  • Cách dùng Absorber Keylogger bí mật ghi lại thao tác bàn phím
  • MOSINT – Tool Truy vết địa chỉ Email để tìm thông tin cá nhân của bất kỳ ai
  • Cách kiểm tra tin nhắn Signal đã an toàn và riêng tư chưa?
  • Signal là gì? Tại sao bạn nên dùng Signal để nhắn tin
  • Nên chọn Signal hay Telegram để thay thế WhatsApp trong năm 2021?
  • Cách chặn kênh Youtube bằng Channel Blocker
  • Giới thiệu về AnonyViet
  • Liên hệ Quảng cáo
  • Privacy & Policy
  • Contact

© 2019 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về Công nghệ.

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

© 2019 AnonyViet - Chúng tôi mang đến cho bạn những kiến thức bổ ích về Công nghệ.

wpDiscuz