Python : 架設基本TCP/IP server
這是用Python3寫的TCP/IP server
超級短 行數不到半百 真的是太棒了哈哈哈哈
需要的時候就直接複製使用吧
下面是我寫的程式碼
我用multiprocessing而不是os.fork
是因為用後者的話就失去python跨平台的優點了
來吧!! 34行tcp server!!
結果的截圖我就不放了
反正就是server
值得注意的是
在C++的版本中我有做避免zombie process的處理
但在這個版本我沒有做
要做,又要兼顧跨平台特性的話
網路上有看到一招是開一個新的thread
在那個thread裡面用join()來等待multiprocessing的process
這邊我就懶得做了
反正 才一個簡單server而已
大不了把main process關掉(ctrl-c)
讓其他並行的process變成孤兒被init收養就好
windows我不熟,但是在我windows10中
當一個client終止連線
該process就從工作管理員的處理程序中的應用程式中消失了
所以應該也是不用擔心(吧
好了,今天的筆記到此結束
希望有幫助未來遺忘這些的自己,以及需要的人
超級短 行數不到半百 真的是太棒了哈哈哈哈
需要的時候就直接複製使用吧
下面是我寫的程式碼
我用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就從工作管理員的處理程序中的應用程式中消失了
所以應該也是不用擔心(吧
希望有幫助未來遺忘這些的自己,以及需要的人
留言
張貼留言