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就從工作管理員的處理程序中的應用程式中消失了
所以應該也是不用擔心(吧
希望有幫助未來遺忘這些的自己,以及需要的人

留言
張貼留言