C++中全局变量(成员函数在该类中几乎等同于全局变量)的问题:
C++中一定要避免用全局变量!很多时候,你哪些时候改了他的值但是你其实并不知道,或者是在不该改变他的值的时候改变了,所以,一定要避免使用全局变量!
TCP/IP连接中,开启多线程的时候,读写函数一定要给他传参!发送send函数参数中一定要有信息和套接字(通过这个套接字给对应的线程发送消息和接收函数! )接收函数中一定要有线程(客户端对应的套接字),否则,如果直接使用类中的成员变量,那么会发生后一个覆盖前一个套接字,这种时候,第一个开的线程实际上和服务器的通信断了一半,因为该客户端可以给服务器发送信息,因为他有服务器对应的套接字,而服务器此时已经丢失了他的套接字,所以有可能会发生将信息发送给第二个线程(客户端)的问题发生!
错误示例:
此时会发生套接字被覆盖的问题!因为收发函数中的sClient为最新连接上的客户端的套接字,即前一个客户端无法收到服务器的回应,因为sClient只有一个值,每次都会被覆盖!
所以解决办法为创建一个临时变量,在线程操作执行函数while(1)之前把值赋给该临时变量,而该临时变量的值一旦进入无限循环不会改变!他的作用域为while(1)循环中!
正确写法:
切记!这个临时变量 如果还是设为类成员变量,那么效果和之前的效果一直,同样会发生覆盖现象,所以一定要是临时变量!!!