C#培训2019-11-20 ChatRoom作业——老师提出的问题总结

本文探讨C#网络编程中的常见问题与优化策略,包括合理使用事件与方法命名、避免全局变量滥用、优化广播消息机制、精简代码执行路径、合理使用修饰符及类成员组织等,旨在提升代码质量与系统稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在Console程序中,Main函式一般不会做事,只是把别人new出来,因为如果做事就会被static限制住。并且一般不会只new,一般new完后会调用方法来“开始”。
2、Server的manager人有两个全局变量,一个存着所有的与客户端对接的人,一个存着客户的名称。:这样从维护性来讲不好,因为别人在移除时可能不知道要移除List内容时候,要同时移除两个。同时前者又能实现后者的全部功能。
3、ListenFunction方法名不正确,主机应该是开始接受
4、newClient.RemoveNameEvent += new ClientMember.RemoveNameHandle( ClientMember_RemoveNameEvent );事件命名以及方法命名有问题,RemoveNameEvent 这个事件的名称应该写实际的动作,不应该写执行的名称,例如改为:客户端断线ClientMember_RemoveNameEvent 这个方法名是程式自动生成的,不应该用这个,应该改为RemoveName就很合适
5、
void newClient_BroadCastEvent( byte[] BroadCastBuffer )
		{
			// broadcast message to all client member
			for( int i = 0; i < m_AllClientMember.Count; i++ ) {
				m_AllClientMember[ i ].BroadCastMessage( BroadCastBuffer );
			}
		}
在上述代码中 BroadCastMessage的方法名不合适,因为每一个ClientMember做的事情就不是广播了,做的事情只是发送,所改为Send比较合适
6、
	for( int i = 0; i < m_szNameList.Count; i++ ) {
					if( m_szNameList[ i ] == szName ) {
						byte[] DuplicateCodingBuffer = Encoding.UTF8.GetBytes( "duplicate" );
						DuplicateCodingBuffer.CopyTo( AnswerBuffer, 0 );
						acceptSocket.Send( AnswerBuffer );
						isNameRepeated = true;
					}
				}

	// if repeated stop run down
	if( isNameRepeated ) {
		continue;
	}
这里的isNameRepeated变量是否有必要存在,没有找到很好的办法解决它,但是,只是找到名字重复后,应该break,减少无效的代码执行。
7、这里没有必要用到public来宣告方法/变量,只需要用internal来宣告,就可以在同一个Project中调用到。
8、类的成员要分开,如分成Internalprivate等。
9、触发事件的时候,要检查一下是不是null
10、一些数字改成常量,如端口号"5678",发送/接收长度:“128”等等
11、由于对接收和发送的长度都为128,因此会有很多重复的操作是的发送的长度固定为128,此处的代码就可以抽出为一个方法来重复使用
12、一般情况下,属性还是对应一个字段比较好。此处Name属性由于习惯性,还是建立一个m_szName的字段,方便以后扩充。
13、窗体类要以Frm开头,如:FrmChatRoomUI
14、一般自建的类,要partial分成四块:publicinternalprotected以及private。就算里面没有内容,也得分成四块,这样结构清晰,扩充容易。注意:一般的不需要用public来宣告,在同一个命名空间下只用internal就够了。
15、
ChatAcceptSocket newLoginSocket = new ChatAcceptSocket( szIP, szName );
bool isNameRepeated = newLoginSocket.ConnectError;
这段代码有两个问题:
第一、我在ChatAcceptSocket建构子中做了太多事情了,一般情况下,不要在建构子中做太多事情,可以new出来以后,再调用方法做事。
第二、ConnectError属性存在的必要性,此处可能没有问题,但是由于开发给外部了,那本身就会代表一个实时性的,而我本身只在建构子中对它进行了赋值操作。这就造成如果别人用的时候,它的状态可能就不准了。解决方法:把它做成一个返回bool的方法,这样就比较好。
16、检查IP地址格式是否正确部分代码,其实没有必要。因为用了try...catchconnect方法中,所以只要connect方法执行失败,就一定是ip不正确。
另一种解决方案:可以通过类似“ping”的方式,来看IP以及端口是否是正确的。如果正确再执行connect方法,这样就少用了一个try...catch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值