14.3.3 程序实例

14.3.3 程序实例

下面以点对点的聊天程序为例,说明Socket通信中服务端和客户端程序设计。

【例14-4】设计一个基于Socket结构的简易聊天程序。

设计思路:首先分别启动一个服务端程序和一个客户端程序,建立连接后,可以互相发送消息,直至一方发出“bye”消息,便结束通信。由于两端都是独立应用程序,因此分为两个程序——服务端程序和客户端程序。程序设计如下:

1.服务端程序

img625

img626

img627

【程序说明】

(1)在2345端口上创建一个ServerSocket对象,并调用ServerSocket的accept()方法等待客户端请求。

(2)当客户端发来请求时,创建一个Socket对象与客户端建立连接,使用Socket对象创建输入输出流对象sin 和sout,然后按约定格式进行数据传输。

(3)启动线程,使用输出流对象sout,将从键盘输入的一行字符串向客户端发送;使用输入流对象sin,按行显示从客户端发来的字符串。

(4)当客户端或本程序中发出“bye”消息时,表示数据传送结束,关闭相应的流和Socket连接,服务端程序运行结束,在析构方法中调用ServerSocket对象的close()方法停止等候客户请求。

2.客户端程序

img628

img629

【程序说明】

(1)定服务端地址和2345端口号,创建一个Socket对象,向服务器发出连接请求,当服务端获得请求后建立连接并可进行数据通信;使用Socket对象创建输入输出流对象cin和cout,然后按约定格式进行数据传输。

(2)启动线程,使用输出流对象cout,将从键盘输入的一行字符串向服务端发送;使用输入流对象cin,按行显示从服务端发来的字符串。

(3)当服务端或本程序中发出“bye”消息时,表示数据传送结束,关闭相应的流和Socket连接,程序运行结束。

【程序运行说明】

对客户端程序和服务端程序编译后,可以同时运行上面两个程序。如果在一台计算机上运行,需要启动两个DOS窗口,分别模拟服务端和客户端。

(1)程序的运行步骤是,首先打开一个DOS窗口,运行服务器端的程序;然后再打开一个DOS窗口,运行客户端的程序。此时双方建立起了连接,就可以聊天了。

(2)无论哪一方(客户机端或服务器端)都可以在自己的DOS窗口里输入要聊天的内容,内容输入完后,按“Enter”键,便把这些内容发送给对方(显示在对方的DOS窗口里)。

(3)如果是在两台计算机上运行,应该修改客户端程序中的服务器地址。

程序运行结果如图14-2所示:

img630

图14-2 Socket通信的服务端和客户端