书接上回《CAPL如何使用socket套接字实现TCP通信(建立连接)》,当TCP建立连接后,就可以传输数据了。
不管是client还是server,都是使用相同的函数传输应用层数据。
tcpSend(clientSocket, "12345", 5);
但这里有一点值得注意:server端传输数据的socket是serverDataSocket,而不是serverSocket。
换句话说,是建立连接成功后返回的socket句柄,它是这个连接中代表server端传输数据的端点endpoint,而不是监听的socket。监听的socket还需要继续监听其他客户端的连接请求。
假设client发送数据,server接收数据,并把接收的数据发送回给client,由client接收。
接收数据调用tcpReceive()函数,从接收缓冲区提取数据到应用层。但这样会有一个问题,如果接收缓冲区没有数据,调用此函数将没有数据被获取。且数据会随时有可能发送过来,调用一次tcpReceive()只能获取当前的数据,后续有数据还是需要再调用。
CAPL提供了回调函数OnTcpReceive()来解决这个问题。当调用tcpReceive()函数接收数据时,如果有数据,将触发OnTcpReceive()函数执行。
server端调用tcpAccept()函数接受连接请求,返回的socket如果有效,说明连接成功,此时可以调用tcpReceive()函数开始接收数据。里面传入的socket一定是连接成功后返回的socket。
void OnTcpListen(dword socket, long result)
{
char buf
标签:调用,函数,TCP,server,CAPL,接收数据,连接,socket
From: https://blog.csdn.net/wjz110201/article/details/137119501