socket 连接问题 ( 积分: 100 )

  • 主题发起人 主题发起人 nhqing
  • 开始时间 开始时间
N

nhqing

Unregistered / Unconfirmed
GUEST, unregistred user!
Socket通讯问题 现在有一个 socket server 他的服务端口是 123 ,给他发送正确的信息以后它会给客户段分配一个端口号,通过这个端口号和数据进行通讯。
数据通讯的数据结构为:
type
packet = record
oline: integer;
callnumber :array[0..31] of char;
timestamp: array[0..19] of char;
representative: integer;
reserved :integer;
end;
现在需要做一个客户端
发送一个 packet结构的内容过去 正确信息它会返回一个端口号 例如 packet.reserved=2000
这样我就需要把客户端和远程2000端口建立连接,通过数据结构进行通讯,
 
没有人能给我一个建议么?
 
你有什么问题吗? 从你的叙述中, 我还不清楚你在哪里有问题。
我给你的建议是: 你要描述清楚你的问题: 你要做什么? 你不明白什么? 别人才好帮你
 
新世纪,
谢谢您的提醒,我不知道如何通过socket接受 record模式的数据,如何显示
就比如说我通过123号端口和远程连接以后,远程挥发一个新的端口给我 让我通过这个端口进行连接,然后通过这个端口和远程服务之间进行通讯,通讯的格式是上面定义的record,我如何把这个record数据结构接收,显示出来。
 
学习中,等待。
 
type
packet = packed record // 最好使用 packed record
oline: integer;
callnumber :array[0..31] of char;
timestamp: array[0..19] of char;
representative: integer;
reserved :integer;
end;

// 在Form中加上一个TcpClient控件,三个按钮
// 启动程序
// 按 button1,等1秒钟,按button2,等1秒钟,按button3...
//---------------------------------------------------------
// 这是最简单的socket操作了,复杂的通讯程序要几年的功夫才能写出来的;


procedure TForm1.Button1Click(Sender: TObject);
begin
tcpclient1.RemoteHost := '127.0.0.1'; // 要连接的服务器的地址
tcpclient1.RemotePort := '123'; // 端口号码
tcpclient1.Active := true; // 执行连接
end;


procedure TForm1.Button2Click(Sender: TObject);
var apack : packet;
begin
// 这里要准备好 packet数据,按需求填写,下面是例子,我随便填写的
apack.oline := 1234;
strcopy(apack.callnumber,'1234567890');
strcopy(apack.timestamp, '2007.04.27 14:59:32');
apack.reserved := -1;
// 发送数据
tcpclient1.SendBuf(apack, sizeof(apack));
end;

procedure TForm1.Button3Click(Sender: TObject);
var apack : packet;
begin
// 接收数据
if tcpclient1.ReceiveBuf(apack, sizeof(apack)) = sizeof(apack) then
begin
showmessage('ok, reserved=' + inttostr(apack.reserved));
end;
end;
 
http://www.51zhan.com 最好的网址站
http://www.51zhan.com 最好的网址站
http://www.51zhan.com 最好的网址站
 
新世纪,兄弟谢谢您
我看了一下资料,觉得还有个问题不是很明白,能不能解答一下 现在我看了那个delphi7的例子,是通过线程 侦听端口的方式,任何往这个ip 端口发送的数据他都能收到,我现在的要求是,不是侦听端口,建立连接以后通过阻塞的方式来获取内容
 
新世纪给的这段代码是最容易理解的!
这100分应该非他莫属
 
接受答案了.
 
楼主: 你好!
节日后我才看到你的问题;
是的, tcp通讯中的数据接收,一般是采用线程处理的, 我上面给你的例子是因为简单起见,一次tcp接收的数据先是系统保存在缓冲区中,所以你过一段时间按Button3也能收到数据;
但正常的情况下还是应该使用线程监视并接收数据; 具体的情况也不是很复杂, 你多看一些例子或者多做一些练习就应该弄明白的, 如果还有问题你可以通过邮件与我联系.
 
后退
顶部