Python Socket Programming 伺服器/用戶端

來源:互聯網
上載者:User

標籤:tran   cep   服務   簡單   小結   一個   send   通訊端   內容   

基於UDP/TCP的通訊端編程demo

UDP 用戶端/伺服器

一個簡單的基於UDP協議的用戶端和伺服器應用的進程通訊。

邏輯:

用戶端會給伺服器發送小寫英文字母,伺服器接受後,把它轉化成大寫再返回給用戶端,用戶端輸出這組數字。由於Python3已經明確區分了str類和bytes類,因此發送的是位元組。

UDP伺服器:
from socket import *udp_server_socket = socket(AF_INET, SOCK_DGRAM)udp_server_port = 9600name = gethostname()udp_server_socket.bind((‘‘, udp_server_port))while True:    print(‘The Sever is ready to receive‘)    # 這段代碼會一直處於阻塞狀態,除非收到了響應    message, client_address = udp_server_socket.recvfrom(2048)    print(‘Client Address:‘, str(client_address), ‘Coming!‘)    modified_message = message.upper()    udp_server_socket.sendto(modified_message, client_address)
UDP用戶端
from socket import *server_ip = ‘127.0.0.1‘server_port = 9600udp_client_socket = socket(AF_INET, SOCK_DGRAM)message = b‘hello‘# 發送給伺服器udp_client_socket.sendto(message, (server_ip, server_port))# 接受伺服器的返回內容modified_message, sever_address = udp_client_socket.recvfrom(2048)print(modified_message)udp_client_socket.close()
TCP 用戶端/伺服器

一個簡單的基於TCP協議的用戶端和伺服器應用的進程通訊。

TCP伺服器
from socket import *tcp_server_socket = socket(AF_INET, SOCK_STREAM)tcp_server_port = 9700tcp_server_socket.bind((‘127.0.0.1‘, tcp_server_port))tcp_server_socket.listen(1)while True:    # 等待串連    print(‘Waiting for connecting!‘)    # 建立TCP串連    connection_socket, addr = tcp_server_socket.accept()    print(‘Connected from:‘, addr)    message = connection_socket.recv(2048)    print(‘The Sever is ready to receive‘)    upper_message = message.upper()    print(upper_message)    connection_socket.send(upper_message)    connection_socket.close()
TCP用戶端
from socket import *server_ip = ‘127.0.0.1‘server_port = 9700tcp_client_socket = socket(AF_INET, SOCK_STREAM)tcp_client_socket.connect((server_ip, server_port))message = b‘hello‘# 發送給伺服器tcp_client_socket.send(message)# 接受伺服器的返回內容modified_message = tcp_client_socket.recv(2048)print(‘Modified Message:‘, modified_message)tcp_client_socket.close()
小結

在寫這個demo的時候,犯了幾個小錯誤:

  1. 在TCP的服務端socket中,我的recv方法不是在串連的connection_socket上操作的,導致了一個錯誤:Transport endpoint is not connected
    類似:https://stackoverflow.com/questions/35969714/error-transport-endpoint-is-not-connected-python-sockets

  2. 在TCP的用戶端socket中,我的recv方法想當然的接受了兩個參數,導致錯誤。 這顯示是因為沒有區分好TCP和UDP的Socket的不同點。
    由於TCP是連線導向的,每次在讀寫的socket對象,不必填入目標主機的地址,只需要直接讀寫資料即可,因此只能接受一個參數(data)。
    而UDP是無串連,每次需要在發送資料需要時填入目標主機的地址,接受時始終也是兩個參數: data和address。

Python Socket Programming 伺服器/用戶端

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.