J a v a P r o g r a m m i n g课程设计报告设计题目:简单的网络聊天程序系别:江淮学院专业:计算机技术与科学班级:计算机3061姓名:周剑学号:3062101103起止日期:2008年12月29日~2009年1月4日指导教师:张永军、周泓、高尚兵、刘虎课程设计中文摘要随着大众化、小型化趋势的加剧,网络聊天在当今已经不算新鲜事物,聊天室可以更好的方便大家交流,请教或探讨问题,同时也能开阔视野。
但大多数网络聊天都需要借助位于Internet的服务器,这就给那些具有大规模内部网络的用户造成了不便,出于安全等考虑,通常这些内部网络不能直接连接到Internet。
我设计的聊天室,提供了类似于常见聊天室的功能,同时可以在局域网内部使用,只需稍加改进,便可以应用于架设企业内部的聊天室,方便员工之间的沟通。
本聊天室系统,主要利用DELPHI用于底层网络通信Socket组件,使用了多线程技术。
关键字:聊天,功能,socketForeign language curriculum design Abstract With the popularization of small and medium-sized trend intensifies, the network has been in today's chat is not new things, chat rooms can facilitate better communication, consult or to study the issue, but also to broaden our horizons. But most networks need to chat with Internet server is located, which for those with large-scale internal network users the inconvenience caused, for safety considerations, these internal network usually can not directly connect to the Internet. I designed the chat rooms, provides a similar function of common chat room, as well as local area network for internal use, just a little improvement, it can be applied to set up enterprises within the chat rooms to facilitate communication between employees.The chat room system, mainly for the use of DELPHI bottom Socket network communication components, the use of multi-threading technology.Keywords: chat, function, socket目录1需求分析 (5)1.1什么是Socket (5)1.2 何为Eclipse? (6)1.3实现思想 (6)1.3.2客户端工作流程 (7)2设计 (7)2.1功能设计 (7)2.2程序设计分析 (7)2.3流程图设计 (8)3代码分析 (8)3.1服务器端代码 (8)3.1.1受到客户端的请求 (8)3.1.2退出聊天室的代码 (9)3.1.2服务端信息能被自己窗口显示 (9)3.1.4服务器处理连接的代码 (10)3.2客户端代码 (10)3.2.1连接服务器的代码 (10)3.2.2GUI界面设计 (10)4程序实现截图 (11)总结 (12)致谢 (13)参考文献 (14)1需求分析随着大众化、小型化趋势的加剧,市场呼吁出现一种适用于中小企业、家庭或个人日常沟通交流的通讯工具,这种工具既要有qq、msn的便捷,又要有较强的数据协作功能,并且对音视频效果提出了更高的要求。
顺应这种走势,众多厂家开始考虑专业视频会议向一般的聊天软件的转型,但是这种聊天工具必须仍旧保持专业视频会议较高的音视频质量并拥有现时聊天工具的易用性能。
此时网络推出视频聊天工具,将视频会议和聊天娱乐完美的结合起来,并增加了一些特色功能:业界最佳音视频质量。
高效的音视频编解码技术,提供会议室级别的音视频质量。
采用国际最先进的H.264视频编解码技术和最先进的GIPS语音引擎技术,确保拥有业界最清晰的画面和最流畅逼真的声音。
聊天功能的可选择性。
多人聊天室区别于传统和现在所有聊天室,拥有两种控制模式:自由和主控模式。
选择自由模式,用户可以把它作为普通聊天室自由共享音视频;选择主控模式,可以进行聊天室的管理,召开进小型会议或者远程培训。
自主会议,每个人都可以体验当家做主的快乐。
区别于以往的视频聊天工具即允许任何人创建自己的多人视频聊天室。
1.1什么是SocketSocket接口是访问Internet 使用得最广泛的方法。
如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201,此时在另一台主机或同一台主机上执行ftp 202.120.127.201,显然无法建立连接。
因为“202.120.127.201”这台主机没有运行FTP服务软件。
同样,在另一台或同一台主机上运行浏览软件如Netscape,输入“http://202.120.127.201”,也无法建立连接。
现在,如果在这台主机上运行一个FTP服务软件(该软件将打开一个Socket,并将其绑定到21端口),再在这台主机上运行一个Web 服务软件(该软件将打开另一个Socket,并将其绑定到80端口)。
这样,在另一台主机或同一台主机上执行ftp 202.120.127.201,FTP客户软件将通过21端口来呼叫主机上由FTP 服务软件提供的Socket,与其建立连接并对话。
而在netscape中输入“http://202.120.127.201”时,将通过80端口来呼叫主机上由Web服务软件提供的Socket,与其建立连接并对话。
在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。
每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
Socket正如其英文原意那样,象一个多孔插座。
一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电,有的提供110伏交流电,有的则提供有线电视节目。
客户软件将插头插到不同编号的插座,就可以得到不同的服务。
在Java语言中,提供了相应的Socket编程方法。
用Java既可以编写服务端的程序,又可以编写客户端的程序。
1.2 何为Eclipse?越来越多的 Java 开发人员已经开始欣赏 Eclipse 的 JDT 提供的生产率和质量收益。
Eclipse 对编写 Java 代码的支持真是棒极了。
它的 Java 编辑器提供了语法高亮显示、格式化、折叠、内容辅助、代码模板等许多功能,我们大多数人都无法想像离开它们会怎么样。
它不断增长的可用重构和代码生成功能集合允许您在更高的级别上操作代码,并自动化通常的代码密集型任务和易错任务。
而且,在开发完代码并使用 JDT 对编写和执行 JUnit 测试的内置支持对代码进行单元测试之后,可以使用 Eclipse 的一流 Java 调试器调试在运行时遇到的任何问题。
除了 JDT 之外,Eclipse SDK ——最流行的 下载——还包含 Plug-in Development Environment (PDE)。
PDE 使用特定功能扩展了 JDT 以构建 Eclipse 插件——基于 Eclipse 的应用程序的基本构造块。
事实上,使用由 Eclipse 本身提供的工具能够超越 Java 开发,可扩展现有 Eclipse 应用程序,或者甚至创建全新的应用程序。
1.3实现思想在Internet上的聊天室程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。
因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。
1.3.1服务器端工作流程服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。
如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。
然后登录成功的客户就可以在服务器上聊天了。
1.3.2客户端工作流程客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。
2设计2.1功能设计设计一个简单的网络聊天室,具有以下功能:(1)客户端能连接服务端:(2)模拟二个人聊天的程序,任何一端都能发送和接收字符信息;(3)只要任何一端单击退出,则可以结束聊天。
2.2程序设计分析1、服务器端:接受客户端的请求,并建立Socket连接,同时也启动发送线程和接收线程。
(1)建立CharServerText,并建立Socket当有客户连接上来时,在文本域显示连接信息。
(2)服务器端点击窗口关闭或点击窗体内的退出按钮可以关闭服务器。
2、客户端:通过IP与服务器端建立Socket连接并启动发送线程和接收线程,进行接受与发送信息(1)显示已连接到服务器端,并且与服务器进行聊天功能;(2)客户端点击窗口关闭或点击窗体内的退出按钮也可以断开连接。
2.3流程图设计3代码分析3.1服务器端代码3.1.1受到客户端的请求try{sk = ss.accept(); while(true) {String ii=br.readLine(); if(ii!=null){System.out.println("1"); jta.append("Client 说:"+ii+"\n"); } }是否连接是否连接客户端代码创建服务器端界面创建ServerSocket创建客户端界面创建Socket 对象接受服务器端输入信息接受客户端输入信息 接受客户端信息接受服务器端信息单击关闭或退出单击关闭或退出开始结束开始 结束是否是否}catch (Exception e){e.printStackTrace();}3.1.2退出聊天室的代码finally{try {ss.close();sk.close();br.close();pw.close();} catch (IOException e) {e.printStackTrace();}}3.1.2服务端信息能被自己窗口显示try {String str = jtf.getText();jtf.setText("");pw.println(str);pw.flush();jta.append("Server说:"+str+"\n");} catch (Exception e) {e.printStackTrace();}3.1.4服务器处理连接的代码s = new ServerSocket(9010);System.out.println("1111");jta.append("已连接到客户机"+sk.getInetAddress().getHostName()+"\n"); br = new BufferedReader(new InputStreamReader(sk.getInputStream())); pw = new PrintWriter(sk.getOutputStream(),true);3.2客户端代码3.2.1连接服务器的代码Socket sk = new Socket("172.16.34.149 ",9010);jta.append("已连接到服务器"+sk.getInetAddress().getHostName()+"\n"); InputStream in=sk.getInputStream();br = new BufferedReader(new InputStreamReader(in));pw = new PrintWriter(sk.getOutputStream(),true);3.2.2GUI界面设计JLabel jl = new JLabel("输入您要说的话");JPanel jp = new JPanel();JTextField jtf = new JTextField(15);JTextArea jta = new JTextArea(10,10);setSize(300,250);4程序实现截图服务器端客户端总结经过一个星期的课程设计,使我复习Java语言的基础知识,进一步加深对Java语言的理解和掌握。