这篇主要是对于聊天窗口的设计容易出现的问题以及如何优化功能做一个总结。湖南安卓培训哪家好?选湖南硅谷啊!
1、连接要用到多线程:将自己的类实现Runable接口,将接受程序写在run()方法里面。
2、所有在文本框里面显示的都是字符串型,所以要注意数据类型的转换。
3、地址和端口号是客户端提供的,服务端只需要连接端口号就行,在socket定义时要用到端口号。
4、发送时要先从文本框取得值然后发送,而接受的话先要接受数据包,再赋值给文本框。
5、服务端接收数据包里面含有地址和端口号,可以通过pa.setAddress(packet.getAddress())获得。端口号也是如此。
6、执行程序是要先从客户端发消息,服务端接收到后才能发消息,因为在我做的程序里面服务端要先得到客户端传送过来的地址和端口号(如何得到见第五条),才能进行发送。
7、在写服务端发送消息给客户端的程序时,一定不要再重新定义socket,因为我一开始就直接是将socket定义为属性的,如果我再重新定义那么我接收到的便是一个空的地址,那么像这种情况你的客户端就会既接收不到信息而且程序还不报错!因为定义为属性的packet处于直接接收状态,所以packet可以在每次发送时再次定义。
8、在本机中自己定义一个客户端和服务端互传消息时,服务端要设置一个setSoTimeout(10000)超市等待。表示如果对方连接状态10秒没有收到数据的话强制断开客户端。
9、除了可以在自己本机发送消息外。还可以通过改变IP地址与在同一局域网内的电脑进行连接。别人连我的话只需要将IP地址改为我的IP地址,同时告诉我他的端口号就可以了。在这里可以做个小优化,显示你每次连接不同服务端是的IP地址。
代码如下:
String s = iAddr.toString();//iAddr表示我设置当前连接的IP地址
int pos = s.indexOf('/');//查找截取/后的IP地址
s = s.substring(pos+1);
txtIP.setText(s);
10、优化聊天窗口,在聊天时想要显示当前消息,关键代码如下:
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");
String time = sf.format(date);
在写日期的时候要记得区分大小写,在Java中大小写是要严格区分的!
附成功执行后的截图:
硅谷学员——丁薇