python使用socket創(chuàng)建tcp服務(wù)器和客戶端。
服務(wù)器端為一個時間戳服務(wù)器,在接收到客戶端發(fā)來的數(shù)據(jù)后,自動回復(fù)。
客戶端,等待用戶輸入,回車后向服務(wù)器發(fā)送用戶輸入的內(nèi)容。
分別在python2.7和python3.6下測試。在啟動時需要先啟動服務(wù)器端,在啟動客戶端。
python2.7下
服務(wù)器端代碼為
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#coding:utf-8 from socket import * from time import ctime print ( "=====================時間戳TCP服務(wù)器=====================" ); HOST = '' #主機(jī)號為空白表示可以使用任何可用的地址。 PORT = 21567 #端口號 BUFSIZ = 1024 #接收數(shù)據(jù)緩沖大小 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) #創(chuàng)建TCP服務(wù)器套接字 tcpSerSock.bind(ADDR) #套接字與地址綁定 tcpSerSock.listen( 5 ) #監(jiān)聽連接,同時連接請求的最大數(shù)目 while True : print ( '等待客戶端的連接...' ) tcpCliSock, addr = tcpSerSock.accept() #接收客戶端連接請求 print ( '取得連接:' , addr) while True : data = tcpCliSock.recv(BUFSIZ) #連續(xù)接收指定字節(jié)的數(shù)據(jù),接收到的是字節(jié)數(shù)組 if not data: #如果數(shù)據(jù)空白,則表示客戶端退出,所以退出接收 break tcpCliSock.send( '[%s] %s' % (ctime(), data)) #向客戶端發(fā)送時間戳數(shù)據(jù) tcpCliSock.close() #關(guān)閉與客戶端的連接 tcpSerSock.close() #關(guān)閉服務(wù)器socket |
客戶端代碼為
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#coding:utf-8 from socket import * print ( "=====================TCP客戶端=====================" ); HOST = '127.0.0.1' #服務(wù)器ip地址,等價于localhost PORT = 21567 #通信端口號 BUFSIZ = 1024 #接收數(shù)據(jù)緩沖大小 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) #創(chuàng)建客戶端套接字 tcpCliSock.connect(ADDR) #發(fā)起TCP連接 while True : data = raw_input ( '> ' ) #接收用戶輸入 if not data: #如果用戶輸入為空,直接回車就會發(fā)送"",""就是代表false break tcpCliSock.send(data) #客戶端發(fā)送消息 data = tcpCliSock.recv(BUFSIZ) #接收回應(yīng)消息,接收到的是字節(jié)數(shù)組 if not data: #如果接收服務(wù)器信息失敗,或沒有消息回應(yīng) break print (data) #打印回應(yīng)消息 tcpCliSock.close() #關(guān)閉客戶端socket |
python3.6下
服務(wù)器端代碼為
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#coding:utf-8 from socket import * from time import ctime print ( "=====================時間戳TCP服務(wù)器=====================" ); HOST = '127.0.0.1' #主機(jī)號為空白表示可以使用任何可用的地址。 PORT = 21567 #端口號 BUFSIZ = 1024 #接收數(shù)據(jù)緩沖大小 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) #創(chuàng)建TCP服務(wù)器套接字 tcpSerSock.bind(ADDR) #套接字與地址綁定 tcpSerSock.listen( 5 ) #監(jiān)聽連接,同時連接請求的最大數(shù)目 while True : print ( '等待客戶端的連接...' ) tcpCliSock, addr = tcpSerSock.accept() #接收客戶端連接請求 print ( '取得連接:' , addr) while True : data = tcpCliSock.recv(BUFSIZ) #連續(xù)接收指定字節(jié)的數(shù)據(jù),接收到的是字節(jié)數(shù)組 if not data: #如果數(shù)據(jù)空白,則表示客戶端退出,所以退出接收 break #tcpCliSock.send('[%s] %s' % (bytes(ctime(), 'utf-8'), data)) tcpCliSock.send(bytes( '[%s] %s' % (ctime(), data.decode( 'utf-8' )), 'utf-8' )) #向客戶端發(fā)送時間戳數(shù)據(jù),必須發(fā)送字節(jié)數(shù)組 tcpCliSock.close() #關(guān)閉與客戶端的連接 tcpSerSock.close() #關(guān)閉服務(wù)器socket |
客戶端代碼為
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#coding:utf-8 from socket import * print ( "=====================TCP客戶端=====================" ); HOST = '127.0.0.1' #服務(wù)器ip地址,等價于localhost PORT = 21567 #通信端口號 BUFSIZ = 1024 #接收數(shù)據(jù)緩沖大小 ADDR = (HOST, PORT) tcpCliSock = socket(AF_INET, SOCK_STREAM) #創(chuàng)建客戶端套接字 tcpCliSock.connect(ADDR) #發(fā)起TCP連接 while True : data = input ( '> ' ) #接收用戶輸入 if not data: #如果用戶輸入為空,直接回車就會發(fā)送"",""就是代表false break tcpCliSock.send(bytes(data, 'utf-8' )) #客戶端發(fā)送消息,必須發(fā)送字節(jié)數(shù)組 data = tcpCliSock.recv(BUFSIZ) #接收回應(yīng)消息,接收到的是字節(jié)數(shù)組 if not data: #如果接收服務(wù)器信息失敗,或沒有消息回應(yīng) break print (data.decode( 'utf-8' )) #打印回應(yīng)消息,或者str(data,"utf-8") tcpCliSock.close() #關(guān)閉客戶端socket |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/luanpeng825485697/article/details/78374372