這裡是你每次的輸入都會被客戶端讀到,然後傳送給伺服器,伺服器接收到後,回送接收到的資訊並附加上時間戳,客戶端接收到回送訊息後列印訊息到螢幕上。
上面的明顯可以看到每個訊息下面都有乙個附加上時間的相同的訊息,這個訊息就是伺服器傳送回來的訊息,沒有帶時間的訊息就是我們輸入的訊息,也是客戶端傳送給伺服器的訊息
伺服器類的**,請單獨將它作為乙個檔案,命名為_server.py
#伺服器類
from socket import*;
#套接字模組
from time import ctime;
#時間模組,用來列印時間
import threading;
#執行緒模組
class
_server
(threading.thread)
:def
__init__
(self, addr, bufsize)
:#addr:伺服器ip位址
threading.thread.__init__(self)
;#初始化執行緒
self.tcpsersock=socket(af_inet,sock_stream)
;#af_inet代表生成面向網路的套接字,sock_stream代表tcp型別
self.tcpsersock.bind(addr)
;#將伺服器ip位址與套接字繫結
self.tcpsersock.listen(5)
;#設定該伺服器最多建立5個tcp連線
self.bufsize=bufsize;
#設定緩衝區大小
defrun
(self)
:#多執行緒的啟動函式,只能命名為run()
while
true
:print
("waiting for connection...");
tcpclisock,addr=self.tcpsersock.accept();
#accept()函式接收到客戶端連線申請後,將切換訊息,從而讓出匯流排,tcpclisock就是接線員,addr是客戶端的ip位址
print
('...connected from:'
,addr)
;while
true
: data=tcpclisock.recv(self.bufsize)
;#客戶端發來的訊息存入data中
ifnot data:
break
; tcpclisock.send(
str(
'['+ctime()+
'] '
).encode(
'utf-8'
)+data)
;#將客戶端傳送的訊息回送給客戶端,並附加上時間戳,表示伺服器已經收到
tcpclisock.close();
#關閉接線員通道
tcpsersock.close();
#關閉tcp連線
客戶端**,與伺服器的**差不多,就不注釋了,命名為_client.py
from socket import*;
from time import ctime;
import threading;
class
_client
(threading.thread)
:def
__init__
(self,addr,bufsize)
: threading.thread.__init__(self)
; self.tcpclisock=socket(af_inet,sock_stream)
; self.tcpclisock.connect(addr)
; self.bufsize=bufsize;
defrun
(self)
:while
true
: data=
input
('>');
ifnot data:
break
; self.tcpclisock.send(data.encode(
'utf-8'))
; data=self.tcpclisock.recv(self.bufsize);if
not data:
break
;print
(data.decode(
'utf-8'))
; self.tcpclisock.close(
);
main**,請保證這個是主函式檔案
from _server import _server;
from _client import _client;
import threading;
from socket import*;
from time import ctime;
server_host='';
#伺服器位址,由於我們是在同一臺電腦模擬客戶端和伺服器通訊,所以不必填伺服器的位址
server_port=
21567
;#伺服器端口號,最好選擇非周知埠號
server_bufsize=
1024
;#緩衝區大小,單位是位元組
server_addr=
(server_host,server_port)
;#生成伺服器位址,主機位址加上埠號
client_host=
'localhost'
;#客戶端類似,不再注釋,localhost代指127.0.0.1,你也可以直接寫127.0.0.1,這個是代指本機ip位址,
client_port=
21567
;client_bufsize=
1024
;client_addr=
(client_host,client_port)
;ser=_server(server_addr, server_bufsize)
;#生成乙個伺服器物件
cli=_client(client_addr,client_bufsize)
;#生成乙個客戶端物件
#多執行緒併發執行
cli.start();
ser.start(
);
Python 實現sftp客戶端(連線遠端伺服器)
import paramiko transport paramiko.transport 106.15.88.182 22 獲取transport例項 transport.connect username root password 123456 建立連線 建立sftp物件,sftpclient是定...
mysql C api 多執行緒多連線 客戶端實現
mysql客戶端庫總是執行緒安全的。對於除mysql real connect 外的所有函式,在預設情況下其他mysql提供給我們的c api函式都是執行緒安全的。要想使mysql real connect 成為執行緒安全的,必須用下述命令再次編譯客戶端庫 shell configure enabl...
多執行緒TCP客戶端的設計
一 首先了解一下tcp客戶端設計的編寫步驟 1 使用wsastartup 初始化winsock庫。2 使用socket 建立乙個ipproto tcp型別的套接字。3 使用 gethostname gethostbyaddr 獲取主機的相關資訊。4 使用connect 連線到伺服器。5 使用send...