[100]socket作業

  • 日期:2019-01-04

  • 研究生:顏慷 Q36064117

目的:

透過Socket連線讓Server和Client建立溝通,並且實作程式碼,與其中的功能解說,相較於課本的範例,我加入”多線程”的功能,使得一個server端能跟多個client作溝通,好比說,server與client1做連結時,在加入client2後,兩個client都能夠傳送訊息給server,而server都能夠成功接收。

1.程式碼

Server端

#!/usr/bin/env python
#coding:utf-8

from socketserver import BaseRequestHandler,ThreadingTCPServer # socketserver 能對socket做封裝
import threading
BUF_SIZE=1024

class Handler(BaseRequestHandler):
    def handle(self):
        address,pid = self.client_address 
        print('%s connected! '%address)
        # 啟動server準備讓client傳送訊息
        while True: 
            data = self.request.recv(BUF_SIZE) # 接收client端傳的信息
            if len(data)>0:
                print(data.decode('utf-8')+ ' is received') #印出client端傳送的信息
                cur_thread = threading.current_thread()
                self.request.sendall('response'.encode('utf-8'))#送response到client端
                print('send response to the client')
            else: #如果client端輸入的信息長度小於0,server端會關閉對該client端的連接
                print('close')
                break

if __name__ == '__main__':
    HOST = '127.0.0.1'
    PORT = 8998
    ADDR = (HOST,PORT)
    server = ThreadingTCPServer(ADDR,Handler)  #ADDR是監聽地址,handler是以建立連接的處理類
    print('Server is listening')

    server.serve_forever() #監聽,建立TCP連接後,對該連接創造新的socket與線程
    print(server)

Client端

Last updated

Was this helpful?