python3:利用socket建立的一個簡單的聊天client端和server端例項

五力發表於2018-06-10

利用socket建立一個簡單的聊天client端和server端, 通過這個例項,可以加強學習瞭解socket的工作機制。

效果如下圖:


server端程式碼如下:

#!/user/bin/env python
#-*- coding:utf-8 -*-

import socket

#待bind的ip/port
ip_port = ('127.0.0.1', 9999)
#建立socket
s = socket.socket()
#繫結ip/port
s.bind(ip_port)
#監聽連線
s.listen()
print('等待使用者連線中... ...')
while(True):
    #建立連線後,將accept()返回的元組賦值給conn, addr
    conn, addr = s.accept()
    if conn is not None:
        print('有一個使用者已連線.\n等待對方傳送資訊.')
    while(True):
        try:
            recv_data = conn.recv(1024)
            #顯示接收的資訊
            print('對方傳送的資訊:', str(recv_data, encoding = 'utf-8'))
            send_data = input('我回復>>').strip()
            conn.send(bytes(send_data, encoding = 'utf-8'))
            print('等待對方傳送資訊>>')
        except Exception:
            print('遠端主機強迫關閉了一個現有的連線,續繼等待其它的連線。')
            break
    conn.close()

客戶端程式碼如下:

#!/user/bin/env python
#-*- coding:utf-8 -*-

import socket

#待建立連線HOST的ip/port
ip_port = ('127.0.0.1', 9999)
#建立socket
s = socket.socket()
#建立連線
s.connect(ip_port)
while(True):
    #待傳送的資訊
    send_data = input('給對方傳送資訊:').strip()
    s.send(bytes(send_data, encoding = 'utf-8'))
    print('等待對方回覆:')
    #接收資訊並顯示
    recv_data = s.recv(1024)
    print('你有新的訊息:', str(recv_data, encoding = 'utf-8'))
s.close()

相關文章