Python : 架設基本TCP/IP server

這是用Python3寫的TCP/IP server
超級短 行數不到半百 真的是太棒了哈哈哈哈
需要的時候就直接複製使用吧

下面是我寫的程式碼
我用multiprocessing而不是os.fork
是因為用後者的話就失去python跨平台的優點了
來吧!! 34行tcp server!!
#tcpserver.py
import sys
import socket
import multiprocessing as mp

def serverTCP(port):
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind(('', port))
    serversocket.listen(5)
    return serversocket

def handleEachClient(client):
    read_buff = ''
    while True:
        read_a_char = client.recv(1).decode('utf-8')
        if read_a_char != '\n':
            read_buff += read_a_char
        else:
            print(read_buff)
            client.sendall(('server echo ' + read_buff + '\n').encode('utf-8'))
            read_buff = ''

def main():
    server = serverTCP(int(sys.argv[1]))
    while True:
        client, addr = server.accept()
        ip,port = addr
        print('get a client from:',ip,':',port)
        p = mp.Process(target=handleEachClient,args=(client,))
        p.start()
        client.close()

if __name__ == '__main__':
    main()


結果的截圖我就不放了
反正就是server
值得注意的是
在C++的版本中我有做避免zombie process的處理
但在這個版本我沒有做
要做,又要兼顧跨平台特性的話
網路上有看到一招是開一個新的thread
在那個thread裡面用join()來等待multiprocessing的process
這邊我就懶得做了
反正 才一個簡單server而已
大不了把main process關掉(ctrl-c)
讓其他並行的process變成孤兒被init收養就好
windows我不熟,但是在我windows10中
當一個client終止連線
該process就從工作管理員的處理程序中的應用程式中消失了
所以應該也是不用擔心(吧


好了,今天的筆記到此結束
希望有幫助未來遺忘這些的自己,以及需要的人

留言

這個網誌中的熱門文章

python的list與numpy的array和matrix的關係