from socket import *
from time import ctime
host = ''
port = 21567
bufsize = 1024
addr = (host, port)
tcpsersock = socket(af_inet, sock_stream) # 建立伺服器套接字
tcpsersock.bind(addr) # 繫結埠, 類似於接線動作
tcpsersock.listen(5) # 最多監聽連線:5
while true:
print('waiting for connection...')
tcpclisock, addr = tcpsersock.accept() # 接受客戶端連線
print('...connected from: ', addr)
while true:
data = tcpclisock.recv(bufsize) # 接受buffsize大小的資料
if not data:
break
# data = bytes(data, encoding="utf-8") # str-->>bytes
str_add = 'i am your server.\n'
str1 = str_add + '[%s] %s' % (bytes(ctime(), 'utf-8'), data)
tcpclisock.send(str1.encode()) # str.encode() str-->>bytes
tcpclisock.close()
tcpsersock.close()
理解:tcp伺服器套接字是乙個object class,變數tcpsersock 是乙個socket的instance,後面的.bind(), .listen 是tcpsersock的動作, bind()是「接線」動作, listen()是監聽動作。其中, tcpsersock.accept()得到來訪的客戶資訊, 在後面的while loop 中, 和客戶進行交流。這些動作必須有先後順序。
小筆記:
str型別資料轉化為bytes型別資料: str.encode('utf-8') bytes(string, encoding='utf-8')
bytes型別資料轉換為str型別資料: bytes.decode(bytes, 'utf-8') str(bytes, encoding='utf-8')
# -*- coding: utf-8 -*-
"""@author: leo
"""from socket import *
host = 'localhost'
port = 21567
bufsize = 1024
addr = (host, port)
tcpclisock = socket(af_inet, sock_stream)
tcpclisock.connect(addr)
while true:
data = input('>>>')
if not data:
break
data = bytes(data, encoding="utf-8") # str -->> bytes
tcpclisock.send(data)
data = tcpclisock.recv(bufsize)
if not data:
break
# print(data.decode('utf-8'))
data = str(data, encoding='utf-8') # bytes -->> str
print(data, type(data))
tcpclisock.close() # 關閉客戶端
客戶端與伺服器通過套接字, 和host, port變數所確定的埠,進行通訊。
我把這個"口", 比作學校牆外的小賣部在學校牆上鑿的洞, 小賣部是伺服器, 買早餐的學生是客戶端。 小賣部伺服器和客戶端學生同時在同乙個洞(通訊位址一致)前時, 購買協議, 語言描述的物品才有了交換的意義。
在建立伺服器的**中tspsersock.accep()返回的值tcpclisock, 和建立客戶端**中的客戶端變數tcpclisock, 描述的分別是小賣部伺服器眼中的洞, 和客戶端學生眼中洞。在對於兩者tcpclisock.send()都是往洞裡放交易的物品(速食麵或者紅票票),tcpclisock.recv()對於兩者而言都是從洞中取出牆的另一側人放入的東西。
總結一下: tcp協議是乙個牆上的洞,牆裡牆外的人通過同時在動乙個洞前, 做一些動作, 完成物品交換(資訊交換)
簡單TCP伺服器建立
簡單tcp伺服器建立 實現tcp伺服器的建立,實現迴圈與客戶端聊天,並且獲取客戶端資訊.tcp程式設計步驟 1 建立套接字socket 買手機.2 套接字繫結 bind 繫結手機卡.3 監聽套接字 listen 等待其他人打 4 接受客戶端請求 accept 接 進行資料的互動過程.通話內容.5 關...
swoole 建立tcp伺服器
server.php 建立tcp伺服器 date 2019 1 15 serv new swoole server 127.0.0.1 9501 監聽連線進入事件 serv on connect function serv,fd 監聽資料接收事件 serv on receive function s...
輕鬆建立Web伺服器
我想有個家,乙個不需要華麗的地方 對於想建網上家園的你來說是否對這首歌更有一番感觸?裝了寬頻之後,我們完全可以把自己的電腦作成web伺服器,感受一下擁有幾十gb空間,cgi php asp等都支援的網上豪宅。心急喝不了熱粥,呵呵,首先還是來簡單了解一下有關web服務的基礎知識。基礎篇web伺服器 在...