1. 程式人生 > >資料結構的理解

資料結構的理解

有關學習了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'