程式工作流程如下:
# -*- coding: utf-8 -*-
from socket import *
from time import ctime
import threading #多執行緒模組
import re #正規表示式模組
host = 'localhost'
port = 10000
bufsize = 1024
addr = (host, port)
tcpsersock = socket(af_inet, sock_stream)
tcpsersock.bind(addr)
tcpsersock.listen(5)
clients = {} # 提供 使用者名稱->socket 對映
chatwith = {} # 提供通訊雙方對映
defdeal
(sock, user):
while
true:
data = sock.recv(bufsize)
if data == 'quit': # 使用者退出
del clients[user]
sock.send(data)
sock.close()
print
'%s logout' % user
break
elif re.match('to:.+', data) is
notnone: # 選擇通訊物件
data = data[3:]
if clients.has_key(data):
chatwith[sock] = clients[data]
chatwith[clients[data]] = sock
else:
sock.send('the user %s is not exist' % data)
else:
if chatwith.has_key(sock): # 進行通訊
chatwith[sock].send("[%s] %s: %s" % (ctime(), user, data))
else:
sock.send('please input the user who you want to chat with')
defmain
():while
true:
print
'waiting...'
tcpclisock, addr = tcpsersock.accept()
print
'from:', addr
username = tcpclisock.recv(bufsize) # 接收使用者名稱
print
'username:', username
if clients.has_key(username): # 查詢使用者名稱
tcpclisock.send("reuse") # 使用者名稱已存在
tcpclisock.close()
else:
tcpclisock.send("connected!") # 登入成功
clients[username] = tcpclisock # 將鍵值對匹配,便於通訊
chat = threading.thread(target=deal, args=(tcpclisock, username)) # 建立新執行緒進行處理
chat.start() # 啟動執行緒
if __name__ == '__main__':
main()
Python網路程式設計和多執行緒 網路程式設計基礎
1.ip協議 ip位址對應的實際上是計算機的網路介面,通常是網絡卡 ip協議 負責將資料從一台計算機通過網路傳送到另一台計算機。資料被分割成小塊,然後通過ip包傳送出去。網際網路鏈路複雜,兩台計算機之間通常有多條線路,路由器負責決定如何把乙個ip包 出去 ipv4 32位 8 4 ipv6 128位...
多執行緒網路程式設計
與多程序程式設計對比 1 建立多程序相比起建立多執行緒會 消耗大量的系統資源 2 程序結束比起執行緒結束,釋放的資源也更多,子程序很快結束,系統負擔加重 3.多執行緒由於在同乙個程序中,很多資源是共用的。所以執行緒間資料共享也非常高效快捷。需要注意的兩點是 1.由於多執行緒在乙個程序中,乙個程序只有...
python 多執行緒程式設計
一 執行緒基礎 1 建立執行緒 thread模組提供了start new thread函式,用以建立執行緒。start new thread函式成功建立後還可以對其進行操作。其函式原型 start new thread function,atgs kwargs 其引數含義如下 args 元組形式的引...