作者liataian (T-PANY FOREVER)
看板Python
标题[问题] Socket问题, 怎麽改变发送的内容?
时间Mon Mar 23 13:52:13 2015
大家好,小弟想要写个简单的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??
想请各位帮忙指教一下, 谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 203.73.6.126
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1427089937.A.686.html
1F:→ uranusjr: 去 Google 搜寻 python non-blocking socket 03/23 18:35
2F:→ liataian: 谢谢楼上大大, 已用thread解决...@@ 03/25 14:40