socket編程(在線自動聊天工具) --Python3

目錄python

@網絡

一、服務端只支持一個客戶端鏈接

服務端程序(server.py):socket

import socket

# 建立服務端socket對象
server = socket.socket()
# 綁定IP(ipocnfig命令查看ip地址)和端口(自定義網絡端口,不和系統已有端口衝突就能夠使用)
server.bind(('192.168.5.106', 8000))
# 能夠等待5個鏈接
server.listen(5)
# 等待客戶端鏈接,若是沒有鏈接,則持序等待
# conn:客戶端與服務端鏈接的對象,服務端經過該對象進行收發數據
# addr:客戶端地址信息
print('服務端已經運行,等待客戶端鏈接……')
conn, addr = server.accept()  # 在這裏會阻塞,只有客戶端進行鏈接,才獲取客戶端鏈接而後開始進行通行
print('有人來鏈接了!')
data = conn.recv(1024)  # 1024:服務端獲取數據一次最多獲取1024byte
print('客戶端給我發了:', data)
conn.send(b'May I help you?')
conn.close()  # 與客戶端斷開鏈接
server.close()  # 關閉服務端的服務

客戶端程序(client.py):工具

import socket

# 建立客戶端socket對象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有鏈接成功,代碼纔會繼續執行
client.send(b'hello')  # 鏈接服務端後給服務端發送消息
data = client.recv(1024)  # 等待服務端發送的消息
print('服務端給我回復了:',data)
client.close()  # 關閉鏈接

服務端運行:code

服務端已經運行,等待客戶端鏈接……
有人來鏈接了!
客戶端給我發了: b'hello'server

客戶端運行:對象

服務端給我回復了: b'May I help you?'ip

二、服務端支持多客戶端鏈接

服務端(server.py):utf-8

import socket

# 建立服務端socket對象
server = socket.socket()
# 綁定IP和端口
server.bind(('192.168.5.106', 8000))
# 能夠等待5個鏈接
server.listen(5)
# 等待客戶端鏈接,若是沒有鏈接,則持序等待
# conn:客戶端與服務端鏈接的對象,服務端經過該對象進行收發數據
# addr:客戶端地址信息
while True:
    print('服務端已經運行,等待客戶端鏈接……')
    conn, addr = server.accept()  # 在這裏會阻塞,只有客戶端進行鏈接,才獲取客戶端鏈接而後開始進行通行
    print('有人來鏈接了!')
    data = conn.recv(1024)  # 字節類型
    resp = data + ',你好!'.encode('utf-8')
    print('已發送「', resp.decode('utf-8'), '」給客戶端……')
    conn.send(resp)  # 字節類型
    conn.close()
    print('服務端斷開鏈接……', '\n')

客戶端程序(client.py):字符串

import socket

# 建立客戶端socket對象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有鏈接成功,代碼纔會繼續執行
name = input('輸入你的姓名吧:')
client.send(name.encode('utf-8'))  # 將字符串轉換爲字節,鏈接服務端後給服務端發送這個字節
resp = client.recv(1024)  # 阻塞,等待服務端發送的消息
print(resp.decode('utf-8'))
client.close()  # 關閉鏈接

服務端運行記錄:

服務端已經運行,等待客戶端鏈接……
有人來鏈接了!
已發送「 Thanlon,你好! 」給客戶端……
服務端斷開鏈接……

服務端已經運行,等待客戶端鏈接……
有人來鏈接了!
已發送「 Kiku,你好! 」給客戶端……
服務端斷開鏈接……

服務端已經運行,等待客戶端鏈接……

客戶端1運行記錄:

輸入你的姓名吧:Thanlon
Thanlon,你好!
客戶端1運行:

客戶端2運行記錄:

輸入你的姓名吧:Kiku
Kiku,你好!

三、在線自動聊天工具

服務端程序(server.py):

import socket

# 建立服務端socket對象
server = socket.socket()
# 綁定IP和端口
server.bind(('192.168.5.106', 8000))
# 能夠等待5個鏈接
server.listen(5)
# 等待客戶端鏈接,若是沒有鏈接,則持序等待
# conn:客戶端與服務端鏈接的對象,服務端經過該對象進行收發數據
# addr:客戶端地址信息
while True:
    print('\n系統提示:服務端已經運行,等待客戶端鏈接……')
    conn, addr = server.accept()  # 在這裏會阻塞,只有客戶端進行鏈接,才獲取客戶端鏈接而後開始進行通行
    print('系統提示:' + str(list(addr)) + '客戶端已鏈接本服務端……\n')
    while True:
        data = conn.recv(1024)  # 字節類型
        if data == b'0':
            break
        print('系統提示:已接收客戶端發來的信息:「' + data.decode('utf-8') + '」')
        resp = data + ',你好!'.encode('utf-8')
        print('系統提示:已發送「', resp.decode('utf-8'), '」給客戶端……')
        conn.send(resp)  # 字節類型
        print('系統提示:與' + str(list(addr)) + '客戶端的鏈接未關閉,可繼續和該客戶端進行對話……')
    conn.close()
    print('系統提示:與' + str(list(addr)) + '客戶端的鏈接已關閉……')

客戶端程序(client.py):

import socket

# 建立客戶端socket對象
client = socket.socket()
client.connect(('192.168.5.106', 8000))  # 阻塞,只有鏈接成功,代碼纔會繼續執行
while True:
    name = input('系統提示,請輸入您的姓名(輸入0關閉鏈接):\n')
    client.send(name.encode('utf-8'))  # 將字符串轉換爲字節,鏈接服務端後給服務端發送這個字節
    if name == '0':
        break
    resp = client.recv(1024)  # 阻塞,等待服務端發送的消息
    print('系統提示:客戶端回覆「' + resp.decode('utf-8') + '」')
client.close()  # 關閉鏈接
print('系統提示:關閉客戶端鏈接!')

服務端運行記錄:

系統提示:服務端已經運行,等待客戶端鏈接……
系統提示:['192.168.5.106', 57892]客戶端已鏈接本服務端……

系統提示:已接收客戶端發來的信息:「Thnlon」
系統提示:已發送「 Thnlon,你好! 」給客戶端……
系統提示:與['192.168.5.106', 57892]客戶端的鏈接未關閉,可繼續和該客戶端進行對話……
系統提示:已接收客戶端發來的信息:「Kiku」
系統提示:已發送「 Kiku,你好! 」給客戶端……
系統提示:與['192.168.5.106', 57892]客戶端的鏈接未關閉,可繼續和該客戶端進行對話……
系統提示:與['192.168.5.106', 57892]客戶端的鏈接已關閉……

系統提示:服務端已經運行,等待客戶端鏈接……
系統提示:['192.168.5.106', 57939]客戶端已鏈接本服務端……

系統提示:已接收客戶端發來的信息:「Maria」
系統提示:已發送「 Maria,你好! 」給客戶端……
系統提示:與['192.168.5.106', 57939]客戶端的鏈接未關閉,可繼續和該客戶端進行對話……
系統提示:與['192.168.5.106', 57939]客戶端的鏈接已關閉……

系統提示:服務端已經運行,等待客戶端鏈接……

客戶1端運行記錄:

系統提示,請輸入您的姓名(輸入0關閉鏈接):
Thnlon
系統提示:客戶端回覆「Thnlon,你好!」
系統提示,請輸入您的姓名(輸入0關閉鏈接):
Kiku
系統提示:客戶端回覆「Kiku,你好!」
系統提示,請輸入您的姓名(輸入0關閉鏈接):
0
系統提示:關閉客戶端鏈接!

客戶2端運行記錄:

系統提示,請輸入您的姓名(輸入0關閉鏈接):
Maria
系統提示:客戶端回覆「Maria,你好!」
系統提示,請輸入您的姓名(輸入0關閉鏈接):
0
系統提示:關閉客戶端鏈接!

固然能夠有任意多的客戶端……

相關文章
相關標籤/搜索