关于TCPServer和TCPClient的一个简单例子……不能理解

LastAvengers 2013-09-02 01:46:50
费了好多天才写出的一个TCPServer和TCPClient的例子,代码很少,看起来好像挺容易,但是有些东西还是不理解……
procedure TForm1.TSAccept(Sender: TObject; ClientSocket: TCustomIpClient);
var //Id:Cardinal;
a: string;
begin

CS := ClientSocket;
ListBox1.Items.Add(CS.RemoteHost);
Memo1.Lines.Add(DatetimeTostr(Now));
Memo1.Lines.Add(CS.RemoteHost + ':');
Memo1.Lines.Add(CS.Receiveln());
//BeginThread(nil,0,@Wait2,nil,0,ID);
while true do /{为什么我单步执行到这里……程序就直接Running了?我没有用线程,可是用死循环接受消息时也不会卡。 在这个循环里的代码明明在执行,可是无法下断,百思不得解! }
begin
a := CS.Receiveln(); //receive message form Client
if a = '' then continue;
Form1.Memo1.Lines.Add(DateTimeToStr(Now));
Form1.Memo1.Lines.Add(CS.RemoteHost + ':');
Form1.Memo1.Lines.Add(a);
end;
end;

还有这两个组件的OPen属性是干什么的?BlockMode是阻塞模式,可是到底有什么用?
(我之前看过C++的网络编程,感觉Delphi封装的组件的用法和Socket的原理相差太多,影响初学者(如我)的理解,我这样的想法对吗)
...全文
11184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
changuncle 2015-08-16
  • 打赏
  • 举报
回复
哦原来是这样啊,理解了学习了好东西,谢谢各位的精彩回答,也谢谢楼主能问出一个这样的问题,受教了。
Frank6600 2013-09-10
  • 打赏
  • 举报
回复 1
首先,你得先了解阻塞模式与非阻塞模式的区别。 虽然刚开始你会觉得比较容易理解、比较容易写的是非阻塞模式, 其实很多人实际用过觉得非阻塞模式没那么好用/实用。 所以,初学者的你,应该学习阻塞模式。 因为阻塞模式比较接近大部份研发人员的思考方式。 比如,你为什么要写一个死循环来读信息? 因为你用阻塞模式在思考。 如果你用非阻塞模式思考问题,你就不会用死循环,而是直接在事件处理里写代码。 OK, 假设你接受使用阻塞模式, 那有一个很大的门坎横在你的面前:多线程。 因为在服务器端,要服务N个客端,而线程又阻塞住了, 当然要用多线程才能解决。 这往下说,话题就多了。 建议你先从了解什么是阻塞模式开始。 ok, 什么是阻塞模式呢? 简单的说就是:当你调用它而目前没有收到信息时,它就阻塞在哪里等,直到有信息来时。 有一点像:你叫儿子去小区门口看看爸爸回来了没有。儿子一去就没回音了,因为他一直站在小区门口,一直等,可能等好几个小时,直到爸爸出现在小区门口。 ok,先从这里开始吧。
LastAvengers 2013-09-08
  • 打赏
  • 举报
回复
回复3楼。。。例子是我自己写的。
iamduo 2013-09-06
  • 打赏
  • 举报
回复
Server.Open 1. CreateSocket 2. Bind 3. Listen 源代码中看似还有一组对 TSocket,TSockAddrIn 的赋值。 Client.Open 1. CreateSocket 2. Connect 而所谓的Block是指。 当调用Socket函数的时候,如果是阻塞的,则在没有完成(比如:Send,没有完成写入缓存的时候,就等待着)。 而NoBlock则会立即返回。 这个就简单理解成 SendMessage 阻塞 PostMessage 非阻塞。
oushengfen 2013-09-05
  • 打赏
  • 举报
回复
例子都有了,自己看啊
LastAvengers 2013-09-02
  • 打赏
  • 举报
回复
为什么没有人?
LastAvengers 2013-09-02
  • 打赏
  • 举报
回复

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧