高手请进,网络编程问题,大送分。(300分)

  • 主题发起人 主题发起人 laotan
  • 开始时间 开始时间
小弟正在做着方面的程序,急需,谢谢给我发份
Skyline@2bzd.com
 
抱歉,好不容易才进来。

to laotan :
服务端,如果使用UDP( FastNet的NMUDP控件 ).
双击 OnDataReceived 事件,注意到没有 ------
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^
FromIP 和 Port, 这就是你想要的 :) 可以参考 Delphi 自带的例程。
-------------------------------------------------------------------------------
如果使用 Socket ( Internet的ServerSocket和ClientSocket),
OnClientConnect事件,传入参数包含有Socket:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
^^^^^^^^^^^^^^^^^^^^^^^^
可以查一下帮助,Socket有LocalAddress,LocalPort,RemotelAddress,RemotePort等属性。
RemotelAddress,RemotePort应该是你要的,但我没验证过。
 
麻烦给我也发一份吧. jxf.cs@163.net
 
能给我一份吗?hkzcp@sina.com
 
我也想要, jingwei@goldeastpaper.com.cn
 
940801你是如何实现分别向ABC发送数据的呢?
可能是延时问题,传送过程的数据丢失等。
 
to All
我再解释一下.假设有"网1"和"网2"两个局域网.A1在"网1"内,A2在"网2"内.分别作为
代理,使两个局域网都上了互连网.A1,A2的外部IP(动态IP)可以得到.现在我想让"网1"中的
电脑 B1和"网2"中的电脑B2通讯(主要是互相传送文件),如何实现?
请高手指教.
我还发现一个有趣的现象.我的代理服务是双网卡,一块内部,一块通过无线网接入Internet
,为何delphi里的chat程序,可以由代理机器连上内部的机器.而非代理机器无法连上代理机器?
 
To xxhsh, A,B,C 使用了代理上的不同端口向 Server 发数据,Server 就可以通过这些端口向他们送数据啊

To laotan,请问你是如何通过程序的到 A1, A2 的动态外部 IP 的?
 
to 940801

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

const
RAS_MaxDeviceType = 16;//设备类型名称长度
RAS_MaxEntryName = 256;//连接名称最大长度
RAS_MaxDeviceName = 128;//设备名称最大长度
RAS_MaxIpAddress = 15;//IP地址的最大长度
RASP_PppIp = $8021;//拨号连接的协议类型,该数值表示PPP连接

type
HRASCONN = DWORD;//拨号连接句柄的类型
RASCONN = record//活动的拨号连接的句柄和设置信息
dwSize : DWORD;//该结构所占内存的大小(Bytes), 一般设置为SizeOf(RASCONN)
hrasconn : HRASCONN;//活动连接的句柄
szEntryName : array[0..RAS_MaxEntryName] of char;
//活动连接的名称
szDeviceType : array[0..RAS_MaxDeviceType] of char;
//活动连接的所用的设备类型
szDeviceName : array[0..RAS_MaxDeviceName] of char;
//活动连接的所用的设备名称
end;
TRASPPPIP = record//活动的拨号连接的动态IP地址信息
dwSize : DWORD;//该结构所占内存的大小(Bytes),一般设置为SizeOf(TRASPPPIP)
dwError : DWORD;//错误类型标识符
szIpAddress : array[0..RAS_MaxIpAddress] of char;
//活动的拨号连接的IP地址
end;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function RasEnumConnections(var lprasconn : RASCONN;
//接收活动连接的缓冲区的指针
var lpcb: DWORD;//缓冲区大小
var lpcConnections : DWORD//实际的活动连接数
) : DWORD; stdcall;
function RasEnumConnections;external 'Rasapi32.dll'
name 'RasEnumConnectionsA';
//获取指定活动的拨号连接的动态IP信息
function RasGetProjectionInfo(
hrasconn : HRasConn;//指定活动连接的句柄
rasprojection : DWORD;//RAS连接类型
var lpprojection : TRASPPPIP;//接收动态IP信息的缓冲区
var lpcb : DWord//接收缓冲区的大小
) : DWORD;stdcall;
function RasGetProjectionInfo;external
'Rasapi32.dll' name 'RasGetProjectionInfoA';
var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
const
MaxConnections = 10;//假设最多有10个活动的拨号连接
var
connections : array[0..MaxConnections-1] of RASCONN;
//拨号连接数组
longSize : dword;
intAvailabelConnections : dword;
//活动的拨号连接的实际数目
intIndex : integer;
strTemp : string;
dwResult : DWORD;
dwSize : DWORD;
RASpppIP : TRASPPPIP;
//活动的拨号连接的动态IP地址信息
begin
connections[0].dwSize:=sizeof(RASCONN);
longSize:=MaxConnections * connections[0].dwSize;
//接收活动连接的缓冲区大小
intAvailabelConnections:=0;
//获取所有活动的拨号连接的信息(连接句柄和设置信息)
dwResult:=RasEnumConnections(connections[0],longSize,intAvailabelConnections);
if 0<>dwResult then memo1.lines.add('错误:'+inttostr(dwResult))
else
begin
memo1.lines.add('现有的活动连接有'+IntToStr(intAvailabelConnections)+'个');
//显示所有活动的拨号连接的信息(设置信息和动态IP地址)
for intIndex:=0 to intAvailabelConnections-1 do
begin
//显示一个活动的拨号连接的设置信息
strTemp := '连接名称:'+StrPAS(connections[intIndex].szEntryName)
+ ',设备类型:'+StrPAS(connections[intIndex].szDeviceType)
+ ',设备名称:'+StrPAS(connections[intIndex].szDeviceName);
memo1.lines.add( strTemp );
//显示一个活动的拨号连接的动态IP地址
dwSize := SizeOf(RASpppIP);
RASpppIP.dwSize := dwSize;
dwResult := RASGetProjectionInfo(connections[intIndex].hRasConn,RASP_PppIp,RasPPPIP,dwSize);//获取动态IP地址
if 0 <> dwResult then memo1.lines.add('错误:'+inttostr( dwResult ))
else memo1.lines.add('动态地址:'+StrPas(RASpppIP.szIPAddress));
end;
end;
end;

end.
 
laotang,你不是局域网吗?怎么又扯到拨号上去了?在服务器上用这个程序?
 
to 940801
两个局域网通过代理接到互联网,“网1”内的机器和“网2”内的机器通讯。
比如两个网吧之间的用户相互通讯。ok?
 
理解一下Socket就有救啦!
 
请发一份资料给我:

janis_lai@sina.com
 
我也要

tghc@china.com
 
我也要!
sdycq@yeah.net
 
我也要!
ryz8800@21cn.com
 
我也要,thankyou!!
 
我也要, THANK you!
yangerpeng1@sina.com
 
我现在正在用UDP进行测试,谁愿意一起参加测试吗?OICQ:19868240
 
我也要, thanks
duansoft@china.com
 

Similar threads

回复
0
查看
847
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部