अटक गया है मैं हास्केल और थ्रिफ्ट का उपयोग करके एक साधारण पिंग पोंग करने की कोशिश कर रहा हूं। हालांकि, यह केवल एक दोहराव करता है और फिर यह अटक जाता है। मुझे लगता है कि समस्या हास्केल की बजाय बहाव के सही उपयोग (इन) में है। शायद कुछ ठीक से फ्लश नहीं किया जाता है। क्या कोई भी थ्रिफ्ट के साथ अनुभव वाला है जो इसे ठीक करने के तरीके पर शिक्षित अनुमान बनाने में मेरी मदद कर सकता है?हास्केल और थ्रिफ्ट के साथ पिंग पोंग
सर्वर:
echorequest :: TXT
echorequest = TXT {
f_TXT_anytxt = Just "Ping"
}
echoreply :: TXT
echoreply = TXT {
f_TXT_anytxt = Just "Pong"
}
serverFunc :: a -> (BinaryProtocol Handle, BinaryProtocol Handle)
-> IO Bool
serverFunc a (h1,h2) = do
let t1 = getTransport h1
dat <- read_TXT h1
-- the following two lines are only for debugging
putStrLn "Recieved data:"
print dat
write_TXT h1 echoreply
tFlush t1
-- the following line is for debugging
putStrLn "Data written"
return False
main :: IO()
main = do
runBasicServer() serverFunc 4390
putStrLn "Server stopped"
ग्राहक:
main :: IO()
main = do
h <- connectTo "127.0.0.1" $ PortNumber 4390
let proto = BinaryProtocol h
putStrLn "Client started"
let tryOnePing c i = do
write_TXT proto echorequest
putStrLn "ping sent"
tFlush h
w <- read_TXT proto
putStrLn "pong received"
return $ if w == echoreply then c+1 else c
c <- foldM tryOnePing 0 [0 .. 1000]
tClose h
print (c, 10000 - c)
मुझे नहीं लगता कि अपने कोड के टुकड़े पर्याप्त किसी को मदद करने के लिए कर रहे हैं। 'Read_TXT' कैसे कार्यान्वित किया जाता है? यदि यह 'एचजीएटीकंट्स' जैसी कुछ का उपयोग करता है तो यह आपकी समस्या है - प्रिंट नहीं पता होगा कि सभी सामग्री कब प्राप्त हुई है और ईओएफ तक अवरुद्ध होगी। शायद यही कारण है कि कनेक्शन बंद करना और एक नया खोलना मदद करता है। –
@ थॉमसएम। डूबुइसन यह थ्रिफ्ट रीड फ़ंक्शन है। इस मामले में एक संरचना को पढ़ने के लिए। –