顯示具有 UDP 標籤的文章。 顯示所有文章
顯示具有 UDP 標籤的文章。 顯示所有文章

2024年10月7日 星期一

使用with..as情境管理器撰寫UDP/TCP程式

參考資料: Socket Programming in Python (Guide)

去年文章:用Python實作UDP傳送和接收程式用Python實作TCP傳送和接收程式

情境管理器(Context Managers,又稱上下文管理器):使用 with asContext Swith

範例一、UDP程式(注意,請開2個IDLE分別執行客戶端程式和伺服端程)

客戶端程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import socket

PORT = 1060
network = '192.168.1.104'
message = '國立虎尾科技大學電機資訊學院有電機、光電、資訊、電子等系所'

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    s.sendto(message.encode('utf-8'), (network, PORT))
    data, address = s.recvfrom(65535)
    print('UDP Client 接收訊息來自 {}:\n{}'.format(address, data.decode('utf-8')

伺服端程式:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import socket

PORT = 1060
network = '192.168.1.104'
message = '國立虎尾科技大學電機資訊學院歡迎您'

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    s.bind((network, PORT))
    print('聆聽訊息來自 ', s.getsockname())
    while True:
        data, address = s.recvfrom(65535)
        print('UDP Server 接收訊息從 {}:\n{}'.format(address, data.decode('utf-8')))
        s.sendto(message.encode('utf-8'), address)

範例二、TCP程式
客戶端:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import socket

PORT = 1060
network = '192.168.1.104'
message = '國立虎尾科技大學電機資訊學院有電機、光電、資訊、電子等系所'

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((network, PORT))
    s.send(message.encode('utf-8'))
    data = s.recv(65535)
    print('TCP Client 接收訊息來自{}:\n{}'.format(network, data.decode('utf-8'))

伺服端:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import socket

PORT = 1060
network = '192.168.1.104'
message = '國立虎尾科技大學電機資訊學院歡迎您'

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind((network, PORT))
    print('聆聽訊息來自 ', s.getsockname())
    s.listen(5)
    conn, address = s.accept()
    print('TCP Server is connected by ' + str(address))
    data = conn.recv(65535)
    print('TCP Server 接收訊息從 {}:\n{}'.format(address, data.decode('utf-8')))
    conn.send(message.encode('utf-8'))

2023年10月1日 星期日

用Python實作UDP傳送和接收程式

參考文章:用Python實作UDP通訊程式

客戶端程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

PORT = 1060
network = '192.168.176.1'
message = '國立虎尾科技大學電機資訊學院有電機、光電、資訊、電子等系所'

s.sendto(message.encode('utf-8'), (network, PORT))
data, address = s.recvfrom(65535)
print('UDP Client 接收訊息來自 {}:\n{}'.format(address, data.decode('utf-8')))

伺服端程式:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

PORT = 1060
network = '192.168.176.1'
message = '國立虎尾科技大學電機資訊學院歡迎您'

s.bind((network, PORT))
print('聆聽訊息來自 ', s.getsockname()) while True: data, address = s.recvfrom(65535) print('UDP Server 接收訊息從 {}:\n{}'.format(address, data.decode('utf-8'))) s.sendto(message.encode('utf-8'), address)

測試步驟如下:
1.先開啟IDLE程式,選擇File->New File,把伺服端程式貼上,選擇Run執行,記得存檔。
2.再開啟另一個IDLE程式,選擇File->New File,把客戶端程式貼上,選擇Run執行,記得存檔。

執行結果:
1.伺服端

2.客戶端


2013年10月11日 星期五

[ Android ] UDP程式設計

本範例參考

把該範例把Server/Client集中在一個範例,我們把它們分開,而該範例僅能送收1次,我們改成能多次送收。
以下是UDPSERVER的程式
以下是UDPCLIENT的程式
記得要把INTERNET權限打開
執行結果