SOCKET(200分)

  • 主题发起人 主题发起人 delphiboy
  • 开始时间 开始时间
D

delphiboy

Unregistered / Unconfirmed
GUEST, unregistred user!
各位老师,你们好!
在下初来宝地,还望多多指教,在下先谢谢了!
在下有二个问题:
1.当SERVERSOCKET是“阻塞”方式,而CLIENTSOCKET是“非阻塞
方式”时,它们是否可以相互连接?

2.可否给在下一个SOCKET“阻塞”方式下的例子程序?(最好详
细一些)

这二个问题困扰在下很久,一直得不到妥善解决,久慕此地
高手如云,前辈多多,希望各位能人可以不吝指导/指点于在下!
在下是否感谢!
 
所谓阻塞, 就是在处理完当前一次完整的数据传送之前系统不再处理其他socket请求.
server阻塞而client非阻塞应该不影响连接, 只是server在处理完这个client的传送之前不
再理会其他client的请求了.
因此, blocking方式一般和multithread一起使用
 
看Delphi Demos下的Internet/Chat实例
 
wangkun:
chat is an example of nonblocking !
 
1.当SERVERSOCKET是“阻塞”方式,而CLIENTSOCKET是“非阻塞
方式”时,它们是否可以相互连接?

当然可以,block/non block只是处理的实现不同,对发送,接收来说是一致的。

2.可否给在下一个SOCKET“阻塞”方式下的例子程序?(最好详
细一些)

具体可以参考译本[用tcp/ip进行网际互连](三本的那个,具体名字可能有误)和电工
的[internet编程],其实阻塞就是单线索的程序(同步方式),程序在发送和接收是无
法做其他的事情。非阻塞就是基于事件的方式。这是指winSock,unix socket另述。
在winsock里,在调用WSAAsyncSelect()之前,socket默认就是阻塞的。
这时候的read, send都是阻塞的。
如果用了WSAAsyncSelect(),在数据到和状态变化时,可以指定一个函数来处理,
就是异步的了。
 
纠正晓钢一点: 关于阻塞模式的使用方式应该是像Another_eYes所说的
 
纠正晓钢一点: 关于非阻塞模式的事件方式往往是用于单线程的情况, 而阻塞方式往往用于多线程
 
后退
顶部