TCP通信 ,客户端服务端流程

TCP通信

TCP:传输层协议

特点:面向连接的安全的流式传输协议

面向链接 :

连接:三次握手,建立双向链接

断开:四次挥手,双向断开

安全的:通信过程会对通信进行校验,判断对方有没有接受到发送的数据,如果没有接受(数据丢失)会对数据进行重传

服务器流程:

1.创建一个套接字 ,这个套接字就是文件描述符

int lfd =socket();

返回值就是一个文件描述符

2.让监听的文件描述符和本地的ip+端口进行绑定

绑定成功之后。lfd就可以检测到有没有客户端连接请求了

bind();

3.给绑定成功的套接字设置监听(上岗了

listen();

4.等待并且接受客户端连接(无连接阻塞等待,有连接解除阻塞),得到新的描述符用于通信的文件描述符

int cfd=accept();

5.使用accept返回值对应的通信文件描述符和客户端通信

接受数据

read();

recv();

发送数据

write ();

send();

6.断开连接,关闭文件描述符(可以关闭监听,也可以关闭通信)

close();

文件描述符 fd 和内核进行关联,一个是读一个是写

客户端通信流程

1.创建用于通信的套接字==(文件描述符)

int fd =socket();

2.使用得到的通信文件描述符连接服务器,通过ip和端口去找

connect();

3.连接成功可以通信

接受数据

read();recv();

发送数据

write();

send();

4.断开和服务器端链接

close();

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!以下是一个简单的C++ Qt TCP通信客户服务代码示例: 服务代码: ```cpp #include <QTcpServer> #include <QTcpSocket> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QTcpServer server; server.listen(QHostAddress::Any, 1234); // 监听所有地址的1234口 QObject::connect(&server, &QTcpServer::newConnection, [&]() { QTcpSocket *socket = server.nextPendingConnection(); QObject::connect(socket, &QTcpSocket::readyRead, [&]() { QByteArray data = socket->readAll(); qDebug() << "接收到客户消息:" << data; socket->write("服务器已接收到消息"); socket->flush(); }); }); return a.exec(); } ``` 客户代码: ```cpp #include <QTcpSocket> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QTcpSocket socket; socket.connectToHost("localhost", 1234); // 连接到本地主机的1234口 QObject::connect(&socket, &QTcpSocket::connected, [&]() { qDebug() << "已连接到服务器"; socket.write("Hello Server"); socket.flush(); }); QObject::connect(&socket, &QTcpSocket::readyRead, [&]() { QByteArray data = socket.readAll(); qDebug() << "接收到服务器消息:" << data; socket.close(); }); return a.exec(); } ``` 这个示例中,服务监听在1234口,客户连接到本地主机的1234口。当客户连接成功后,客户会发送"Hello Server"的消息给服务服务接收到消息后会回复"服务器已接收到消息"给客户客户接收到回复后会打印出来并关闭连接。 你可以根据需要修改代码来满足你的具体需求。希望对你有帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值