1. 程式人生 > >Python Socket,並完成簡單的聊天室

Python Socket,並完成簡單的聊天室

Socket是什麼?
網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。
建立網路通訊連線至少要一對埠號(socket)。socket本質是程式設計介面(API),對TCP/IP的封裝,TCP/IP也要提供可供程式設計師做網路開發所用的介面,這就是Socket程式設計介面;HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力
Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程序通訊機制,取後一種意思。通常也稱作”套接字”,用於描述IP地址和埠,是一個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。
網路協議:
TCP/IP,udb,http等等都是網路協議。
瞭解這麼多我們開始做一個簡單的聊天室吧。

伺服器:

import socket
import threading
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("0.0.0.0",9999)) ## 0,0,0,0的意思是所有ip都可以連線,後面的9999是埠。
s.listen(5)  ##這個是socket的監聽事件,用來約束連線數量
sock,addr =s.accept()  #因為這個方法返回的是元組有兩位,所以我直接使用兩個接收。
print("有人連線!!")
print(sock)  #這裡可以發現sock是網路使用者的詳細資訊
print(addr) # 這個是連線網路的ip和埠
true=True def rec(sock): global true while true: t=sock.recv(1024).decode('utf8') #函式的核心語句就一條接收方法recv限制接收資訊的大小使用byte單位。 if t == "exit": #如果輸入exit退出 true=False print(t) trd=threading._start_new_thread(target=rec,args=(sock,)) #使用_start_new_thread方法定義執行緒並執行,args這裡必須使用元組所以有逗號。
while true: #傳送訊息 t=input() sock.send(t.encode('utf8')) #使用socket的send方法傳送訊息無限迴圈 if t == "exit": true=False s.close()

客戶端:

import socket
import threading
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.11.58",9999))  # 使用connect方法連線伺服器
true=True
def rec(s):
    global true
    while true:
        t=s.recv(1024).decode("utf8")  #客戶端也同理
        if t == "exit":
            true=False
        print(t)
trd=threading._start_new_thread(target=rec,args=(s,))
trd.start()
while true:
    t=input()
    s.send(t.encode('utf8'))
    if t == "exit":
        true=False
s.close()

解釋在註釋中。