[問題] Socket問題, 怎麼改變發送的內容?

作者: liataian (T-PANY FOREVER)   2015-03-23 13:52:13
大家好,小弟想要寫個簡單的Client-Server程式, 有些問題想請教一下
我想做的內容大概是這樣:
1. Client每隔1秒會發一個"Hello"字串給Server, 總共發30個
2. 當Server收到第15個"Hello"字串後, 會回傳一個"World"字串給Client
3. 當Client收到這個"World字串後", 剩下要發的15個字串通通都變成"Hello World"
目前的程式如下(使用UDP):
Client端:
from socket import socket, AF_INET, SOCK_DGRAM
import time
sock = socket(AF_INET, SOCK_DGRAM)
for i in range(30):
sock.sendto(bytes("Hello", "utf-8"), ("192.168.1.xxx", 7777)) #發送"Hello"
time.sleep(1) #睡一秒
sock.close()
Server端:
from socket import socket, AF_INET, SOCK_DGRAM
import time
sock = socket(AF_INET, SOCK_DGRAM)
sock.bind(("", 7777))
counter = 0 #記錄目前總共收到多少"Hello"字串
while(True):
data, clientAddress = sock.recvfrom(1024)
print(data.decode("utf-8")) #印出"Hello"
counter+=1
if counter == 15: #如果已經收到15個"Hello", 就回傳一個"World"字串
sock.sendto(bytes("World", "utf-8"), clientAddress)
目前Server端應該是沒問題,問題就在於Client端該怎麼接收這個值呢?
也就是Client端的這一行: data , serverAddress = sock.recvfrom(1024)
應該放在哪邊比較適合?? 目前是有嘗試說放在for loop前面或裡面, 不過都會卡住..
如果for loop結束後才放則有違本意, 畢竟發送都結束了, 不知道需不需要用到Thread??
想請各位幫忙指教一下, 謝謝!
作者: uranusjr (←這人是超級笨蛋)   2015-03-23 18:35:00
去 Google 搜尋 python non-blocking socket
作者: liataian (T-PANY FOREVER)   2015-03-25 14:40:00
謝謝樓上大大, 已用thread解決...@@

Links booklink

Contact Us: admin [ a t ] ucptt.com