- 论坛徽章:
- 0
|
回复 #1 computerzanz 的帖子
这是一个简单的socket编程问题,socket只是提供一个连接方式而已,具体如何实现传输要自己设计。
比如如何判断发送完毕,很简单,你循环调用recv,知道recv返回的值为零的时候,就表明服务器没有发送任何数据了,这时候发送完毕。
实现的方法有很多,可以使用fork或者select,推荐使用select来进行socket编程,这样系统不会阻塞,而且服务器发送完文本以后,可以再发一个完毕信号给客服端,比如字符串“Finished”,这样当客户端接收到数据以后,先与字符串“Finished”进行比较来判断是否发送完毕。
至于socket的缓冲区和send里面的buffer不是一个概念,你可以把socket看成一个FIFO,服务器往fifo里面写东西,客户端从fifo里面读数据,一个不断的写,一个不断的读,如果一方停止写,那么另一个之后将读不到任何东西。那么这个fifo有多大呢,一般默认是64k,这个就是socket的缓冲区,当然也可以自己更改这个缓冲区的大小。但是send函数里面的buffer参数一般来说都比64k要小很多,这个buffer的大小需要根据自己的实际情况来设置,如果文本不是很大的话,一般不要设置得太大,以免发生数据丢失的情况。 |
|