一、客户端登录
首先,信号与槽机制——login(),然后就是connected()
然后,相当于现在已经登录成功了,那么我们就开始发送【登录信息】(login()中调用sendLogin())——
对应的函数是sendlogin(),实现中使用_socket将buf中的内容写过去——
-
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()





