问题
在使用socket实现客户端和服务端通信时,传送数据的一点小bug,即有关“\n”传输的问题。
问题描述
在传输过程中我希望服务端将”\n”这种换行符包裹在发送的信息内一并发送到客户端,这样可以省去在客户端解析数据后再添加这些特殊符号的步骤,但是客户端接收到的”\n”后面的数据被客户端解析程序解析到下一段代码中,如下图结果所示:
代码中StringUtil.SPLIT为分割符
sendMsg = StringUtil.BROADCAST+StringUtil.SPLIT+username+"\n"+StringUtil.SPLIT+msg;
解决
在debug时发现该问题后第一想法便是取消服务器处理“\n”,改用客户端处理输出,服务端只发送基本的数据。操作后问题完美解决,显示效果如下图:
总结
1.设计服务端时应尽可能地减少服务端对不必要数据的计算,以节约服务器资源服务更多的用户。
2.在使用socket连接时,数据的发送与接收尽可能地封装那些最基础的数据,针对转译字符之类的尽可能地避免。