Hi,
Thanks.
I set the addr to 0.0.0.0, switched to SendTo and the reply was correct.
Since I will be communicating with many of these external devices I wanted
one TWSocket for each external device, that was why I set the addr field
to
the external devices IP address. Using 0.0.0.0 it appears all the external
devices will reply through that one TWSocket and I will need to sort them
out in the OnDataAvaliable.
Is that correct?
Thanks,
Mark
-----Original Message-----
From: twsocket-boun...@elists.org [mailto:twsocket-boun...@elists.org] On
Behalf Of wilfried Mestdagh
Sent: Wednesday, March 24, 2010 3:03 AM
To: 'ICS support mailing'
Subject: Re: [twsocket] UDP...
Hi,
WSocket1.Addr:='192.168.1.2';
WSocket1.port:='9600';
I get an error 10049.
Means you cannot bind to that address. '192.168.1.2' is the address on the
remote machine, you can not listen on that.
The only difference I can see is the sending local port number is not
9600.
This should make no difference. You can set local port of course. There is
a
property for that.
--
mvg, Wilfried
http://www.mestdagh.biz
-----Oorspronkelijk bericht-----
Van: twsocket-boun...@elists.org [mailto:twsocket-boun...@elists.org]
Namens
zayin
Verzonden: woensdag 24 maart 2010 1:12
Aan: twsocket@elists.org
Onderwerp: [twsocket] UDP...
Hello,
I ran into this a couple years ago and I found a work around so I dropped
it. Now, new computer, new OS, new task. So, any reasons for my failure
that
might have been computer/OS related are...
I am using Wireshark to verify what I am seeing.
Using D2007 and ICS version 5.25, UDP with TWSocket.
When I call 'Listen' after setting:
WSocket1.Addr:='192.168.1.2';
WSocket1.port:='9600';
I get an error 10049. Then of course if I send some bytes I get a 10057
error.
When I call 'Connect' after setting:
WSocket1.Addr:='192.168.1.2';
WSocket1.port:='9600';
I can send the bytes and Wireshark shows them as transmitted and I get a
reply from 192.168.1.2.
The reply I get back indicates there is an error in the bytes. I KNOW the
bytes are correct. The device also supports TCP with the same bytes and
when
I use TCP all is good. I have other software, I did not create, and it
works
with UDP using the same byte stream.
The only difference I can see is the sending local port number is not
9600.
I am not sure why that matters. The software that does work does have a
local port number of 9600. And after hours, that is the only difference I
can see.
The source is below and I can upload a project if someone needs it.
Any ideas? What am I missing?
Ciao,
Mark
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, WSocket, IcsLogger;
type
TForm2 = class(TForm)
Memo1: TMemo;
WSocket1: TWSocket;
ListenStartBtn: TButton;
ListenStopBtn: TButton;
Label1: TLabel;
Label2: TLabel;
ConnectStartBtn: TButton;
StopConnectBtn: TButton;
IcsLogger1: TIcsLogger;
procedure ListenStartBtnClick(Sender: TObject);
procedure WSocket1Error(Sender: TObject);
procedure WSocket1SessionConnected(Sender: TObject; ErrCode: Word);
procedure WSocket1SessionClosed(Sender: TObject; ErrCode: Word);
procedure WSocket1DataAvailable(Sender: TObject; ErrCode: Word);
procedure ListenStopBtnClick(Sender: TObject);
procedure ConnectStartBtnClick(Sender: TObject);
private
holdingBuff:array [0..2048] of byte;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
var
outBuffer:array [0..17] of byte =
($80,$00,$02,$00,$02,$00,$00,$04,$00,$03,$01,$01,$B0,$00,$00,$00,$00,$01);
procedure TForm2.ConnectStartBtnClick(Sender: TObject);
begin
Memo1.Lines.Add('');
Memo1.Lines.Add('ConnectStartBtnClick');
WSocket1.Addr:='192.168.1.2';
WSocket1.port:='9600';
Memo1.Lines.Add('Connect');
WSocket1.Connect;
Memo1.Lines.Add('Send');
WSocket1.Send(@outBuffer,18);
end;
procedure TForm2.ListenStartBtnClick(Sender: TObject);
begin
Memo1.Lines.Add('');
Memo1.Lines.Add('ListenStartBtnClick');
WSocket1.Addr:='192.168.1.2';
WSocket1.port:='9600';
Memo1.Lines.Add('Listen');
WSocket1.Listen;
Memo1.Lines.Add('Send');
WSocket1.Send(@outBuffer,18);
end;
procedure TForm2.ListenStopBtnClick(Sender: TObject);
begin
Memo1.Lines.Add('Stop');
WSocket1.Close;
end;
procedure TForm2.WSocket1DataAvailable(Sender: TObject; ErrCode: Word);
var
byteCount:integer;
begin
if (ErrCode <> 0) then
Memo1.Lines.Add('WSocket1DataAvailable: ' + IntToStr(ErrCode));
Memo1.Lines.Add('WSocket1DataAvailable');
byteCount:=WSocket1.Receive(@holdingBuff[0],sizeOf(holdingBuff));
if (byteCount < 1) then
Exit;
Memo1.Lines.Add(IntToStr(byteCount));
end;
procedure TForm2.WSocket1Error(Sender: TObject);
begin
Memo1.Lines.Add('WSocket1Error: ' + IntToStr(WSocket1.LastError));
end;
procedure TForm2.WSocket1SessionClosed(Sender: TObject; ErrCode: Word);
begin
if (ErrCode <> 0) then
Memo1.Lines.Add('WSocket1SessionClosed: ' + IntToStr(ErrCode));
Memo1.Lines.Add('WSocket1SessionClosed');
end;
procedure TForm2.WSocket1SessionConnected(Sender: TObject; ErrCode: Word);
begin
if (ErrCode <> 0) then
Memo1.Lines.Add('WSocket1SessionConnected: ' + IntToStr(ErrCode));
Memo1.Lines.Add('WSocket1SessionConnected');
end;
end.
DFM---------------------------------------
object Form2: TForm2
Left = 758
Top = -807
Caption = 'Form2'
ClientHeight = 714
ClientWidth = 667
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 543
Top = 104
Width = 41
Height = 19
Caption = 'Listen'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object Label2: TLabel
Left = 543
Top = 232
Width = 57
Height = 19
Caption = 'Connect'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
end
object Memo1: TMemo
Left = 8
Top = 8
Width = 529
Height = 689
ScrollBars = ssVertical
TabOrder = 0
end
object ListenStartBtn: TButton
Left = 543
Top = 136
Width = 75
Height = 25
Caption = 'Start'
TabOrder = 1
OnClick = ListenStartBtnClick
end
object ListenStopBtn: TButton
Left = 543
Top = 167
Width = 75
Height = 25
Caption = 'Stop'
TabOrder = 2
OnClick = ListenStopBtnClick
end
object ConnectStartBtn: TButton
Left = 543
Top = 264
Width = 75
Height = 25
Caption = 'Start'
TabOrder = 3
OnClick = ConnectStartBtnClick
end
object StopConnectBtn: TButton
Left = 543
Top = 295
Width = 75
Height = 25
Caption = 'Stop'
TabOrder = 4
OnClick = ListenStopBtnClick
end
object WSocket1: TWSocket
LineMode = False
LineLimit = 65536
LineEnd = #13#10
LineEcho = False
LineEdit = False
Proto = 'udp'
LocalAddr = '0.0.0.0'
LocalPort = '0'
LastError = 0
MultiThreaded = False
MultiCast = False
MultiCastIpTTL = 1
ReuseAddr = False
ComponentOptions = []
ListenBacklog = 5
ReqVerLow = 1
ReqVerHigh = 1
OnDataAvailable = WSocket1DataAvailable
OnSessionClosed = WSocket1SessionClosed
OnSessionConnected = WSocket1SessionConnected
OnError = WSocket1Error
FlushTimeout = 60
SendFlags = wsSendNormal
LingerOnOff = wsLingerOn
LingerTimeout = 0
KeepAliveOnOff = wsKeepAliveOnSystem
KeepAliveTime = 30000
KeepAliveInterval = 1000
SocksLevel = '5'
SocksAuthentication = socksNoAuthentication
Left = 568
Top = 16
end
object IcsLogger1: TIcsLogger
LogFileOption = lfoOverwrite
LogFileName = 'C:\test.txt'
LogOptions = [loDestEvent, loDestFile, loDestOutDebug, loAddStamp,
loWsockErr, loWsockInfo, loWsockDump, loSslErr, loSslInfo, loSslDump,
loProtSpecErr, loProtSpecInfo, loProtSpecDump]
Left = 592
Top = 528
end
end
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be