关于send与recv的顺序有关问题

关于send与recv的顺序问题
我刚开始学socket编程,比较菜。大家先看我下面的做法对不对:(TCP)

服务器端:
1.socket
2.bind
3.listen
之后做一个死循环:accept接受客户端的连接,send和recv实现与客户端的交互,closesocket断开本次连接
做死循环是为了接受多个客户端的连接请求

客户端的工作是:
1.socket
2.bind
3.connect连接服务器
4.send和recv实现与服务器端的交互
5.closesocket断开连接

我知道,在连接建立以后,send只是往发送缓冲区送数据,recv则是从接受缓冲区“抓”数据。
我的问题是,缓冲区对于进来和出去的数据是怎么处理的?能不能认为客户端两次连续的send送达服务器端的时候还是连续的?
比如说,客户端第一次发送“first”外加结束符‘\0’,第二次发送“second”外加结束符'\n',那么在服务器端接受到的数据是不是一定就是“first\nsecond\n”呢?也就是说,在服务器端能不能用一个足够大的缓冲区一次性接受这客户端的两次发送呢?
如果不行的话,是不是说在服务器端必须recv两次?那么我怎么样判断接受到的数据是first还是second呢?

服务器端和客户端点在一次连接中的send和recv的次数是不是必须相等?

------解决方案--------------------
阻塞的socket由于采用了Nagle算法,如果发送数据小的话,会暂存然后一起发送过去
非阻塞的可能是一次一次的发送的。
至于接收问题,由于TCP是流协议,没有包边界,所以有可能会收两次,一次是first\0,一次是second\0,
也有可能是一次收完,就是first\0second\0.

所以正常的TCP收发时,都应该在头上加个发送长度,好让接收端来按长度接收