以兩台數據機對傳資料,但其中一台會出現程式無回應狀況 |
尚未結案
|
kadlac
一般會員 發表:18 回覆:30 積分:9 註冊:2004-07-23 發送簡訊給我 |
大家好!
小弟寫了一個程式,以兩台數據機A及B對傳資料,
每偶數分鐘時A啟動連線,連線成功後B傳資料給A
每奇數分鐘時B啟動連線,連線成功後A傳資料給B
所以同一程式既當發送端也當接收端, 測試結果其中一台會出現程式無回應狀況,請大家幫幫忙......
我是用文魁書中的TComm 元件來做的
程式架構如下: int connect=0;
Bool Transmit=false;
AnsiString astr;
void modem(); void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ if (偶數分鐘)
{
Timer1->Enabled=false; modem(); Timer1->Enabled=true;
} if (奇數分鐘)
{
Timer1->Enabled=false; modem(); Timer1->Enabled=true;
} } void modem()
{
connect=0;
transmit=true; Comm1->OutputString(連線之AT command);
Delay(30000); // 等30 sec if (connect==1)
{
Form1->Memo1->Lines->Add("連線成功");
判斷是否收到 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
} transmit=false;
}
void __fastcall TForm1::Comm1ReceiveData(TObject *Sender)
{ astr=Comm1->Input; if (astr.Pos("connect")!=0) //連線成功偵測
{
if (transmit==true) //A啟動連線
{
connect=1;
} if (transmit==false) // B發現連線後就傳送字串給A
{
Delay(1000);
Form1->Comm1->OutputString("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); }
}
感謝大家的幫忙!!!
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
1.你的做法看起來怪怪的。
為什麼不是以 Comm1ReceiveData 這裏有什麼”指令”進來。而去做事情。
而是用 DELAY?
這不像是 C/S 的做法。
C/S 的做法是。 SERVER 接受指令。就去執行這個指令,然後回報結果。
你這樣用 DELAY。。。。會怎樣????會變成PROCESS 進入暫停?
因為你沒有開 MULTITHREAD?因為我沒用過你說的這個元件。所以我不知道你會變成怎樣。 ^_^ 2.MODEM連線是有沒有撥號動作?
有一種”專線MODEM”是不用撥號的。
你只要對 COM PORT丟過去。它就”通透”到對面的COM PORT 進去了。
你要做這樣的動作,不妨考慮一下這種東西。^_^
|
kadlac
一般會員 發表:18 回覆:30 積分:9 註冊:2004-07-23 發送簡訊給我 |
謝謝您的回覆!
1.
我現在的問題是同一套程式又要當Client , 又要當Server , 所以變成總有一方要發出指令, 所以當Server 的一方也得發出指令...
所以不能以 Comm1ReceiveData 這裏有什麼”指令”進來,而去做事情。
嚴格來說, 這種架構的確不是 Client Server 架構, 但是 Boss 要求這樣,只好想想有什麼方法達成啦.....
2.
這裡Delay 的目的是要等待連線成功, 所以一定要等... 還是有其它方法?
3.
如果用MultiThread ,在這個地方應該怎麼做,可以示範一下嗎?
4.
目前的需求是以撥號來做,所以不用專線MODEM的模式 非常感謝您的幫忙!!
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
我沒說錯啊。
以 Comm1ReceiveData 這裏有什麼”指令”進來。而去做事情。
請想一下上面這句話。
我以 IRC SERVER 為例解說。
當你連線進IRC時。是你對它有所動作。
你要把你的發言貼上去。是你對SERVER 提出 REQUEST。
SERVER 對你的 REQUEST 做 SERVICE。。。
可是。IRC SERVER 每隔一段時間。會懷疑你已經不小心”斷線”了。
所以他會對IRC CLIENT提出 PING 的 REQUEST。
而你的 IRC CLIENT 就必須要回應 PONG。 這就是你所說的情況了啊。
IRC SERVER 又是提供服務端。又是需求提出者。
IRC CLIENT 也是需求提出者。卻又是提供服務者啊。
可是它們之間的連線只有一條。沒錯吧。
所以。把你的想法改一下。
改成當你的 COMPORT 在收到 CONNECT 時。要做什麼事情。
要丟出字串?還是怎樣?
何者丟?何者收?做個FLAG判別嘛。
OK?????
|
kadlac
一般會員 發表:18 回覆:30 積分:9 註冊:2004-07-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |