11.5 实现参考2(发送聊天信息到服务器)
客户端登录时,在LoginFace类中和服务器端建立网络连接,获得网络连接对象socket,在登录成功后,客户端将打开聊天界面(Talk Face类),然后通过Talk Face类和服务器传递信息。
一个客户端和服务器端只有一个网络连接对象socket。如果客户端程序有多个类要和服务器端进行通信,那么客户端中多个类之间共享同一个socket对象,如图2.11.2所示。
图2.11.2 客户端与服务器端的socket连接方式
在Talk Face类中,要和服务器端进行通信,需要在Login Face类中获得当前客户端与服务器端的网络连接对象,并且还需要当前客户端用户的username。所以,在创建聊天类Talk Face类时,需要将Login Face类中的username和socket对象传入Talk Face类。
也可以不传递socket对象,而是把基于socket对象的输入流、输出流对象从LoginFace类传入TalkFace类,利用TalkFace类的构造方法来接收输入、输出流的对象和username,见代码11.5的第88行,这需要给TalkFace类添加一个有3个参数的构造方法,见代码11.6的第18行。
Login类:保持不变。
代码11.5、11.6和11.7-1
代码11.5、11.6和11.7-2
【代码11.5】LoginFace类
【代码11.6】Talk Face类
当用户在文本输入框中输入信息时,除了将用户输入的信息发送到聊天记录文件外,还需将用户输入的信息发送给服务器,见代码11.6的第83行。
代码11.6的第42行将当前客户端的username输出在聊天界面的标题栏中。
【代码11.7】Server类
服务器端和客户端成功建立连接后,若客户端账号验证成功,则客户端会向服务器发送消息。服务器端需要不断地接收客户端发来的信息,见代码11.7的第24行到26行。