資料結構的理解
阿新 • • 發佈:2018-12-20
有關學習了TCP/IP的資料結構,能夠傳送資料並且傳送資料要有反饋,這裡我知道了主要傳送資料給伺服器
給定的伺服器程式碼:
from socketserver import ThreadingTCPServer, StreamRequestHandler import time import threading class TcpSer(ThreadingTCPServer): def __init__(self,server_address, RequestHandler): self.daemon_threads = True self.allow_reuse_address = True ThreadingTCPServer.__init__(self, server_address, RequestHandler) class RequestHandler(StreamRequestHandler): wfiles = [] rfiles = [] def handle(self): flag = True while flag: time.sleep(0.5) clientaddress = self.client_address if self.wfile not in self.wfiles: self.wfiles.append(self.wfile) print(str(clientaddress)+"已連線") self.wfile.write(b'hello') self.getData() # 伺服器可以接收如下命令:help,connect,exit # 伺服器端收到help,返回“commands include help,connect,exit” # 收到,connect,返回“connect code is 400” # 收到,exit,返回“exit code is {500}” # 資料解析 def getData(self): while True: time.sleep(0.5) input = self.rfile.read(1024) input = input.decode().strip() print(input) if input == 'help': self.wfile.write(b'commands include help,connect,exit') if input == 'connect': self.wfile.write(b'connect code is 400') if input == 'exit': self.wfile.write(b'exit code is {500}') if input not in ['help','connect','exit']: self.wfile.write(b'the command is wrong') if __name__ == '__main__': server_address = ('',10001) tcp = TcpSer(server_address,RequestHandler) print("服務已開啟\r\n") tcp.serve_forever()
開啟伺服器會有提示:
客戶端:
這裡我只進行了傳送資料,並沒有資料進行切片處理反饋回來規定的資料。
然後可以傳送資料:
遇到的問題及其解決辦法
一:[WinError 10013] 以一種訪問許可權不允許的方式做了一個訪問套接字的嘗試
1:C:\Users\wj>netstat -ano|findstr 10001
TCP 0.0.0.0:10001 0.0.0.0:0 LISTENING 4086
UDP 0.0.0.0:10001 *:* 4086
2:C:\Users\wj>tasklist |findstr 4086
KGService.exe 4086 Console 3 14,400 K
3:C:\Users\wj>taskkill /pid 4086/F
成功: 已終止 PID 為 8124 的程序。
二:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb4 in position 0:invalid start byte
1:用notepad++開啟檔案,在工具欄找到編碼,將ANSI編碼改為UTF-8偏碼,重新儲存就可以用了
2:還可以將# -*- coding:utf-8 -*-改為#-*-coding:GBK -
三:ConnectionAbortedError: [WinError 10053] 你的主機中的軟體中止了一個已建立的連線。 三:四:ConnectionRefusedError: [WinError 10061] 由於目標計算機積極拒絕,無法連線。
原因:同一個程序開兩個檔案
四:如圖情況
原因:程式碼的地址應該為
hostname ='localhost'