全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3965
推到 Plurk!
推到 Facebook!

關於UdpSocket Receive的問題

尚未結案
Achillis
一般會員


發表:1
回覆:0
積分:0
註冊:2004-05-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-19 10:55:57 IP:221.169.xxx.xxx 訂閱
小弟最近剛開始接觸網際網路的東西
所以對Udp元件還不是很熟悉
希望大大們能夠幫幫忙~讓小弟能完成這簡單任務
以下是小弟的程式碼@@
[code delphi]
///////////UdpSocket Open
procedure TForm1.Button1Click(Sender: TObject);
var
iGetError :Integer;
begin
UdpSocket1.RemoteHost:='192.168.0.119';
UdpSocket1.LocalHost:='192.168.0.124';
UdpSocket1.LocalPort:='5001'; //設定本機Port number
UdpSocket1.RemotePort:='502'; //設定遠端主機Port number
UdpSocket1.Open;
iGetError := System.GetLastError;
MessageBox(0, PChar(IntToStr(iGetError)), 'Before open', 0);
MessageBox(0, 'UdpSocket Open.', 'error', 0);
UdpSocket1.Active := True;
end;
procedure TForm1.UdpSocket1Connect(Sender: TObject);
var
s :string;
begin
//UdpSocket1.LocalPort:='5001';
s := char(00) char(00) char(00) char(00) char(00) char(06) char(00) char(02) char(00) char(00) char(00) char(04);
UdpSocket1.Sendln(s,'');
MessageBox(0, 'UdpSocket Connect.', 'error', 0);
end;
procedure TForm1.UdpSocket1Receive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);
var
ss:string;
begin
ss := UdpSocket1.Receiveln;
Edit1.Text := IntToStr(Length(ss));
memo2.Lines.Add(ss);
MessageBox(0, 'UdpSocket Recevice.', 'error', 0);
end;
//////UdpSocket Close
procedure TForm1.Button2Click(Sender: TObject);
begin
UdpSocket1.Active := False;
UdpSocket1.Close;
MessageBox(0, 'UdpSocket Close.', 'error', 0);
end;
//////UdpSocket Send Message
procedure TForm1.Button4Click(Sender: TObject);
var
Buf :string;
Recaddr : sockaddr_in;
DataLen :Integer;
iGetError :Integer;
begin
Recaddr.sin_family := AF_INET;
Recaddr.sin_port := htons(StrToInt('502'));
Recaddr.sin_addr.S_addr := inet_addr(PChar('192.168.0.124'));
Buf := 'Hello World!';
DataLen := Length(Buf);
UdpSocket1.SendBuf(Buf, DataLen);
UdpSocket1.SendTo(Buf, DataLen, Recaddr);
iGetError := System.GetLastError;
MessageBox(0, PChar(IntToStr(iGetError)), 'error', 0);
end;

[/code]
目前遇到的問題是
在UdpSocket.Open以及 UdpSocket.Sendto之後
都加了GetLastError進去看~回傳值都是0
表示open或是sendto都有成功才是
但是在DEBUG模式的時候~卻偏偏進不了Receive function內
所以我老是接收不到資料~~請問一下這是為什麼呢??
小弟是不是有哪些事情沒有作對呀??
還請各位大大們幫忙小弟一下^^ 謝謝
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-20 12:04:33 IP:210.66.xxx.xxx 訂閱
如果你是剛剛才接觸Socket方面的東西,
建議你先去熟悉現有元件, 如 Indy, 試著
在程式中架構資料傳輸.

以下連結是之前分享的主題, 你可以參考一下喔...

http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=90517

===================引 用 Achillis 文 章===================
小弟最近剛開始接觸網際網路的東西
所以對Udp元件還不是很熟悉
希望大大們能夠幫幫忙~讓小弟能完成這簡單任務
以下是小弟的程式碼@@
bruce_59714
一般會員


發表:3
回覆:19
積分:9
註冊:2006-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-04 11:53:24 IP:60.250.xxx.xxx 訂閱
1.不要使用Event被動觸發接收,直接使用Timer定時主動去呼叫接收函式。
2.Binding死Local端之IP與Port Number
3.你應該是連Modbus/UDP存取資料!
系統時間:2024-04-25 20:56:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!