java课程设计报告--聊天小程序(2)

2019-08-02 00:01

山东科技大学学生课程设计

2 概要设计说明

2.1 模块调用图

2.2 套接字连接示意图

2.3 主要函数声明

1、Socket的构造方法如下: Socket(String host,int port)

参数host是服务器的IP地址,port是一个端口号。 2、ServerSocket的构造方法如下: ServerSocket(int port)

2

山东科技大学学生课程设计

port是一个端口号。port必须和客户呼叫的端口号相同

3、当建立时可能发生IOException异常,因此应像下面那样建立到服务器的套接字连接:

Try {

Socket myscoket=new Socket(“http://192.168.0.78”,1880); }

Catch(IOException e){}

4、当建立服务器时可能发生IOException异常,因此,应像下面那样建立接收客户的服务器套接字:

Try {

ServerSocket server_scoket=new ServerSocket(1880); }

Catch(IOException e){}

比如1880端口已被占用时,就会发生IOException异常。

5、当服务器的ServerScoket对象server_socket建立后,就可以使用accept()方法接收客户的套接字连接呼叫,代码如下:

Server_socket.accept();

6、客户使用Socket类不带参数的构造方法Socket()创建一个套接字对象,该对象需调用

Public void connect(SocketAddress endpoint) throws IOException 请求和参数SocketAddress指定地址的套接字建立连接,为了使用connect方法,可以使用SocketAddress的子类InetSocketAddress建立一个对象,InetSocketAddress的构造方法如下:

Public InetSocketAddress(InetAddress addr,int port)

3

山东科技大学学生课程设计

3 详细设计说明

3.1 功能描述

聊天程序分为服务器端和客户端两部分,服务端程序主要负责侦听客户端发来的消息,客户端需要登陆到服务器端才可以实现正常的聊天功能。 服务器:

1、在特定端口上进行侦听,等待客户端连接。 2、向已经连接到服务器端的 用户发送系统消息。 3、当停止服务时,断开所有的用户连接。 4、系统运行稳定、安全可靠。 客户端:

1、连接到已经开启聊天服务的服务器端。 2、当服务器端开启后,用户可以发表聊天信息。 3、用户可以向所有人发送消息。 4、系统运行稳定、安全可靠。

3.2 主要功能详述

3.2.1 客户建立连接到服务器的套接字对象

1、当套接字连接mysocket建立后,可以想象一条通信“线路”已经建立起来。mysocket可以使用getInputStream()方法获得一个输入流,然后用这个输入流读取服务器放入“线路”的信息。mysocket还可以使用getOutputStream()方法获得一个输出流,然后用这个输出流将信息写入“线路”。

2、在实际编写程序时,把mysocket使用getInputStream()方法获得的输入流接到另一个数据流上,然后就可以从这个数据流读取服务器来的信息,之所以这样是因为后面DataInputStream流有更好的从流中读取信息的方法。

3、同样把mysocket使用getOutputStream()方法得到的输出流接到另一个DataOutputStream数据流上,然后向这个数据流写入信息,发送给服务器端,之所以这样做也是因为后面的DataOutputStream流有更好的向流中写入信息的方法。

4

山东科技大学学生课程设计

3.2.2 ServerSocket类

1、客户负责建立客户到服务器的套接字连接,即客户负责呼叫。因此服务器必须建立一个等待接收客户的套接字的ServerSocket对象。ServerSocket的构造方法如下:

ServerSocket(int port)

port是一个端口号。port必须和客户呼叫的端口号相同

2、所谓接收客户的套接字连接就是accept()方法会返回一个和客户端Socket对象相连接的Socket对象,服务器端的这个Socket对象sc使用getOutputStream()方法获得的输出流将指向客户端Socket对象myscoket使用getInputStream()方法获得的那个输入流;同样,服务器端的这个Socket对象sc使用使用的 getInputStream()方法获得的输入流将指向客户端Socket对象myscoket使用getOutputStream()方法获得的那个输出流 。

3、连接建立以后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名。同样,客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有服务器端的IP地址和域名。

双方通信完毕后,应使用close()方法关闭套接字连接。

3.2.3 把套接字连接放在一个线程里

需要注意的是,从套接字连接中读取数据与从文件中读取数据有很大的不同。尽管两者都是输入流,但从文件中读取数据时,所有的数据都已经在文件上了,而使用套接字连接时,可能在另一端数据发送出来之前,就已经开始试着读取了,这时,就会堵塞本线程,直到该读取方法成功读取信息,本线程才继续执行后续的操作。因此,服务器端收到一个客户的套接字后,就应该启动专门为该客户服务的线程。

3.3 主要代码分析

3.3.1 使用套接字实现的主要方法

服务器为每个客户启动一个线程,在该线程中通过套接字和客户交流信息。

5

山东科技大学学生课程设计

当向服务器发送一条聊天信息时,服务器要让所有的这些线程中的输出流写入信息,这样所有的客户的套接字的输入流就读取到了这一条信息。

如果想把信息送给特定的用户,服务器就让特定的线程中的输出流写入信

息,那么只有特定的客户的套接字的输入流可以读取到这条信息。

3.3.2 客户端

public void actionPerformed(ActionEvent e) { if(e.getSource()==connection)//连接服务器 { try

{ if(socket.isConnected()) {} else

{ InetAddress

address=InetAddress.getByName(\);//传递域名 InetSocketAddress socketAddress=new InetSocketAddress(address,666);

socket.connect(socketAddress); in =new

DataInputStream(socket.getInputStream()); out = new

DataOutputStream(socket.getOutputStream()); name=inputName.getText(); out.writeUTF(\姓名:\+name); send.setEnabled(true); if(!(thread.isAlive())) thread=new Thread(this);

thread.start();//启动线程,新建状态到就绪队列排队 } }

catch (IOException ee){}

6


java课程设计报告--聊天小程序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:学前教育函授考试题12年

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: