QT项目复习2

一、客户端登录

首先,信号与槽机制——login(),然后就是connected()

然后,相当于现在已经登录成功了,那么我们就开始发送【登录信息】(login()中调用sendLogin())——


对应的函数是sendlogin(),实现中使用_socketbuf中的内容写过去——

  • sendLogin()结束之后,就需要开始读服务器响应的应答包

服务器的应答包数据到达客户端的时候,会有一个信号readyRead()到来。为了应对这个信号,我们写一个槽函数recv()来读到来的数据——

  • 注意append是追加,而不是直接覆盖缓冲区。当数据包读对以后,调用analyze()函数来分析数据包。将recv_buf中的数据传入analyze()后,还要对recv_buf进行处理,【后面的数据】不能直接清空,而是截取【后面的数据】重新赋值给recv_buf,然后进入死循环while(1)

  • analyze()

使用QString来保存ID

  • 难点:解析含有垃圾数据包,粘包的问题

二、服务器

  • ret = 0意味着客户端关闭了连接,服务器则continue,回到循环开始继续accept()
  • ret = -1,线程通信的时候不能用perror,因为read()就会重置errno,会冲突,所以用printf()就好

2.1 接收登录数据

  • 打印下字节数来确定收到了数据包——
  • 读到数据包,打印完字节数后,意味着我们可以来解析数据包analyzeData()了——

recv_buf中存储的是接收到的数据,然后根据recv_buf中的内容来填写send_buf中的内容
然后对于登录信息,需要回复一个ID,这个ID是唯一的,所以我们可以使用文件描述符来代替

  • 解析完数据包后,再直接发送应答包,发送应答包则是直接调用write()

你可能感兴趣的:(QT项目复习2)