TCP/IP连接之多线程

C++中全局变量(成员函数在该类中几乎等同于全局变量)的问题:

C++中一定要避免用全局变量!很多时候,你哪些时候改了他的值但是你其实并不知道,或者是在不该改变他的值的时候改变了,所以,一定要避免使用全局变量!

TCP/IP连接中,开启多线程的时候,读写函数一定要给他传参!发送send函数参数中一定要有信息和套接字(通过这个套接字给对应的线程发送消息和接收函数! )接收函数中一定要有线程(客户端对应的套接字),否则,如果直接使用类中的成员变量,那么会发生后一个覆盖前一个套接字,这种时候,第一个开的线程实际上和服务器的通信断了一半,因为该客户端可以给服务器发送信息,因为他有服务器对应的套接字,而服务器此时已经丢失了他的套接字,所以有可能会发生将信息发送给第二个线程(客户端)的问题发生!

错误示例:

此时会发生套接字被覆盖的问题!因为收发函数中的sClient为最新连接上的客户端的套接字,即前一个客户端无法收到服务器的回应,因为sClient只有一个值,每次都会被覆盖!

所以解决办法为创建一个临时变量,在线程操作执行函数while(1)之前把值赋给该临时变量,而该临时变量的值一旦进入无限循环不会改变!他的作用域为while(1)循环中!

 

正确写法:

切记!这个临时变量 如果还是设为类成员变量,那么效果和之前的效果一直,同样会发生覆盖现象,所以一定要是临时变量!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值