版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀
2、蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄
3、蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿
4、蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆
5、莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀
6、薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄
7、蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肃莀薂羆膅膃蒈羅袅莈莄薂肇膁莀薁腿蒆虿薀衿艿薅蕿羁蒅蒁薈肃芈莇薇膆肀蚅蚇袅芆薁蚆羈聿蒇蚅膀芄蒃蚄袀膇荿蚃羂莂蚈蚂肄膅薄蚁膇莁蒀蚁袆膄莆螀罿荿节蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈芈蚇螅袇肁薃螄罿芇葿袃肂肀莅袂螁芅芁袁袄肈蚀袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇 学 号: 武汉理工大学华夏学院课 程 设 计题 目计算机网络课程设计系 别信息工程专 业软件技术班 级姓 名成 绩2011年01月 13 日课程设计任务书学生姓名: 专业班级:
8、题 目: 简单的聊天软件(c/s) 目录一、设计目的3二、设计任务3三、时间安排3四、具体设计过程和步骤(以协议验证编程为例)34.1 需求分析34.1.1项目描述34.1.2系统需求44.2套接字介绍与使用44.3 流程分析与设计44.4 项目基本步骤54.4.1创建项目以及基本的包54.4.2创建项目的基本类54.5 编码64.6 系统实施与运行184.6.1服务器启动与关闭窗体视图184.6.2客户端产生视图184.6.3服务器聊天窗口、客户机聊天窗口184.6.4服务器与客户机交互194.6.4 cmd模式telnet服务器进行和交互20五、设计心得体会21六、设计过程中的疑问21七、
9、指导教师评语22一、 设计目的通过本课程设计,培养学生具有c/s或b/s式的网络应用系统的设计和开发以及中小规模组网能力;掌握常用网络开发工具(如vb、vc)的使用,或掌握web开发工具(如asp等)的方法与网络规划、设计、集成的步骤和方法;使同学们经历网络应用系统开发及网络集成的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识,在实践中培养分析问题和解决问题的能力。并为毕业设计打下坚实的基础。通过分析设计和实现,可以使理论知识得到验证并且能够了解基本网络开发的方法、步骤,细节,提高动手能力。二、 设计任务1. 实现简单的客户端发送信息、服务器端收信息。2. 实现简单的服
10、务器端发送信息、客户端收信息3. 实现客户端请求关闭连接,服务器作出相应4. 编程模拟实现telnet5. 获取主机名和ip地址三、 时间安排01月10日,查阅资料,确定设计题目;01月11日,分析题目,创建工程,准备程序;01月12日,封装代码,上机调试程序;01月13日,提交课程设计报告;四、 具体设计过程和步骤(以协议验证编程为例)4.1 需求分析4.1.1项目描述 在信息网络高速发展的今天,网上聊天已成为了我们每天生活、工作必不可少的一部分,如qq、飞鸽、uc等聊天工具的普及。聊天工具为我们的生活和学习带来了很多方便,在这里我做了一个简单的网络聊天软件神话聊天室,实现了一些基本的服务器
11、与客户端的相互交流和请求,本项目编写简单,易于移植,交流方便。本项目主要实现的功能是利用网络知识套接字(ip地址+端口号),实现服务器和客户端的基本通信功能,并且服务器可以实现同时与多台客户端通信交流。本项目利用java知识、借助myeclipse开发平台,写了一个服务器端和一个客户端,可以将这个客户端移植到别的机器上与本机实现多对一的交流,同时客户端也可以在自己利用远程登陆的方式(开始运行cmdtelnet 服务器ip 服务器端口号),与服务器进行交流。4.1.2系统需求1. 问题描述利用myeclipse平台,设计出简洁, 用户友好的聊天界面及方便灵活的客户端与服务器之间的交流,能完成基本
12、的一对一用户交流、一对多用户交流,客户端与服务器之间的相互请求关闭连接的操作。该系统主要包括服务器端和客户端两部分:服务器端:利用java知识serversocket类定义一个服务器端端口new serversocket(int iport),然后不但让服务器端端口产生监听,利用多线程知识定义一个线程类,让每接受到一个监听就给服务器产生一个聊天窗口,直至聊天结束就关闭此窗口。客户端:利用 java 知识socket类定义一个客户端 端口new socket( string ip,int iport),此ip为服务器端主机的ip地址,端口号为服务器端服务器定义的端口号,然后让客户端启动,这样客户
13、端就会就请一次服务器,服务器接受到一个监听就给服务器产生一个与之对应的聊天窗口,两者进行聊天,直至哪一方要求结束聊天就关闭窗体。2. 显示服务器与客户机的ip和主机名利用java中的getlocaladdress().gethostname()和getinetaddress();3. 项目视图的建立 利用java se 知识采用java中swing包控件,创建一个启动服务器的窗体(见图4)、一个启动客户端的窗体(见图6)、一个服务器端的聊天窗体(见图8)、一个客户端的聊天窗体(见图8)。4.2套接字介绍与使用 多个tcp连接或多个应用程序进程可能需要通过同一个 tcp协议端口传输数据。为了区别
14、不同的应用程序进程和连接,许多计算机操作系统为应用程序与tcpip协议交互提供了称为套接字(socket)的接口。多个tcp连接或多个应用程序进程可能需要通过同一个 tcp协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与tcpip协议交互提供了称为套接字(socket)的接口。套接字简介:套接字,是支持tcp/ip的网络通信的基本操作单元,可以看做是不同主机的间的进程进行双向通信的端面点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程4.3 流程分析与设计启动服务器serversocket ss产生服务器端聊天窗口产生监听socket s
15、=ss.accept()启动客户端输入服务器端主机ip+porttruefalsetruefalse产生客户端聊天窗口进行相互交流图1 主要流程图4.4 项目基本步骤4.4.1创建项目以及基本的包打开myeclipse,新建java project工程,取名为chatroom,图2; 在src下新建包edu.huaxia.chatserver、edu.huaxia.chatclient,图3; 图2 图3 4.4.2创建项目的基本类1. 创建启动服务器视图类tcpserveview.java,代码见4.5编码12. 创建线程服务器类tcpsession.java,代码见4.5编码23. 创建服
16、务器端聊天窗口视图类chatwindowserevrview.java,代码见4.5编码34. 创建启动客户端视图类clientview.java,代码见4.5编码45. 创建客户端聊天窗口视图类tcpclient.java,代码见4.5编码54.5 编码1. tcpserveview.java代码:package edu.huaxia.chatserver;import java.aw*;import java.io.ioexception;import .serversocket;import .socket;import javax.swing.*;/* * author thomas
17、*服务器端窗体:开始和停止服务 */public class tcpserverview extends jframeprivate static final long serialversionuid = 1l;private serversocket ss;private jbutton start,stop;public tcpserverview()super(服务器窗体);try ss = new serversocket(6666);/给服务器绑定一个端口 catch (ioexception e1) e1.printstacktrace();start = new jbutton
18、(启动服务器);/开始按钮监听事件启动服务器start.addactionlistener(new actionlistener()public void actionperformed(actionevent e) start.setvisible(false);/启动后设置开始按钮不可见/如果停止按钮是不可见时,启动后设置停止按钮可见if (stop.isvisible()=false) stop.setvisible(true);this.start();/调用内部类的start方法/* * 内部类方法,监听一个端口,并产生一个线程 */private void start() try
19、socket socket=ss.accept();new tcpsession(socket).start();/让线程开启 this.start(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace(););stop = new jbutton(关闭服务器);stop.setvisible(false);/最初时设置停止按钮不见/停止按钮监听事件停止服务器stop.addactionlistener(new actionlistener()public void actionperformed
20、(actionevent e) this.close();/调用内部类的close方法/如果开始按钮是不可见时,启动后设置开始按钮可见if (start.isvisible()=false) start.setvisible(true);/设置停止按钮不可见stop.setvisible(false);/* * 内部类方法,关闭端口 */private void close() try if(ss!=null)/如果端口不为空,就关闭该端口ss.close(); catch (ioexception e) / todo auto-generated catch blocke.printstac
21、ktrace(););this.add(start);this.add(stop);this.setlayout(null);this.setbackground(color.light_gray);this.setbounds(150, 150, 300, 300);this.setvisible(true);start.setbounds(100, 75, 100, 50);stop.setbounds(100, 155, 100, 50);public static void main(string args) /主方法,调用自己,产生图形化用户界面new tcpserverview()
22、;2. tcpsession.java代码:package edu.huaxia.chatserver;import java.io.*;import .socket;import edu.huaxia.chatview.chatwindowserverview;/* * author thomas *对服务器产生的线程进行处理 */public class tcpsession extends thread private socket socket;private bufferedreader br;private printstream ps;public tcpsession(sock
23、et s) this.socket = s;try /定义端口的输入输出流br=new bufferedreader(new inputstreamreader(socket.getinputstream();ps=new printstream(socket.getoutputstream(); catch (ioexception e) e.printstacktrace();/* * 流的关闭方法 */public void close()try if(br!=null) br.close();if(ps!=null) ps.close();if(socket!=null) socket
24、.close(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace();/* * 线程的启动方法 */public void run() /产生一个图形化聊天界面chatwindowserverview cws = new chatwindowserverview(socket,br,ps);cws.dopost();/调用cws的dopost方法cws.close();/调用cws的close方法cws.dispose();/将这个聊天窗体摧毁this.close();/调用自己关闭流的方法cl
25、ose3. chatwindowserevrview.java代码:package edu.huaxia.chatview;import java.io*;import .socket;import java.text.simpledateformat;import java.util.date;import javax.swing.*;/* * author thomas *用户聊天窗体 */public class chatwindowserverview extends jframe implements actionlistenerprivate static final long s
26、erialversionuid = 1l;private jlabel l1,l2,l3,l4;private jpanel p1,p2,p3,p4,p5;private textarea ta1,ta2;private jbutton send,quit;private bufferedreader br;private printstream ps;private boolean b=true;/* * 构造器对窗体属性的基本定义 */public chatwindowserverview(socket socket,bufferedreader br,printstream ps)sup
27、er(神话聊天室服务器);this.br=br;this.ps=ps;l1 = new jlabel(客户ip:+socket.getlocaladdress();l3 = new jlabel(客户名字:+socket.getlocaladdress().gethostname();l2 = new jlabel(主机ip:+socket.getinetaddress();l4 = new jlabel(主机名字:+socket.getinetaddress().gethostname();border b1 = borderfactory.createtitledborder(聊天信息显示
28、窗体);border b2 = borderfactory.createtitledborder(发送信息窗体);border b3 = borderfactory.createtitledborder(对方基本信息);border b4 = borderfactory.createtitledborder(本人基本信息);p1 = new jpanel();p1.setborder(b1);p2 = new jpanel();p2.setborder(b2);p3 = new jpanel();p3.setborder(b3);p4 = new jpanel();p4.setborder(b
29、4);p5 = new jpanel();ta1 = new textarea(10,47);ta2 = new textarea(11,67);font f = new font(default,font.plain,18);ta1.setfont(f);ta1.setforeground(color.red);send = new jbutton(发送);send.addactionlistener(this);/产生监听quit = new jbutton(关闭);quit.addactionlistener(this);/产生监听this.setlayout(null);this.ad
30、d(p1);this.add(p2);this.add(p3);this.add(p4);this.add(p5);p1.add(ta1);p2.add(ta2);p3.add(l1);p3.add(l3);p4.add(l2);p4.add(l4);p5.add(send);p5.add(quit);this.setbounds(100,100, 720, 600);p1.setbackground(color.gray);p1.setbounds(0, 0, 500, 280);p3.setbackground(color.white);p3.setbounds(505, 0, 190,
31、280);l1.setbounds(507, 5, 187, 30);l2.setbounds(507, 37, 187, 30);p2.setbackground(color.pink);p2.setbounds(0, 290, 500, 220);p4.setbackground(color.light_gray);p4.setbounds(505, 290, 190, 220);l2.setbounds(507, 295, 187, 30);l4.setbounds(507, 327, 187, 30);p5.setbounds(0, 520, 500, 40);this.setvisi
32、ble(true);/* * 对监听事件的处理 */public void actionperformed(actionevent e) /发送按钮事件。当发送文本框的值不为空时,就将信息发送为输出流,同时在信息框中打印出来if(e.getsource().equals(send) string s1=null;s1=ta2.gettext().trim();if(!s1.equals()ta2.settext();/对时间对象的处理simpledateformat sdf = new simpledateformat(yyyy-mm-dd hh:mm:ss);date date = new
33、date();/如果得到的是quit就返回方法 if(quit.equalsignorecase(s1) ta1.append(服务器+sdf.format(date)+:+要求断开连接); ps.println(+sdf.format(date)+:+要求断开连接); return; ps.println(+sdf.format(date)+:+s1); ta1.append(服务器+sdf.format(date)+:+s1+n); ps.flush();else if(e.getsource()=quit)/发送按钮事件。将“quit”信息发送为/输出流,同时将b设置为falseps.p
34、rintln(quit);b=false;/* * 接受输入流的信息 */public void dopost()try string s=null;simpledateformat sdf = new simpledateformat(yyyy-mm-dd hh:mm:ss);date date = new date();ps.println(+sdf.format(date)+:你好,欢迎光临神话聊天室!);while(b)s=br.readline();if(s!=null|s!=)if(quit.equalsignorecase(s) /若得到的是quit就返回ta1.append(客
35、户+sdf.format(date)+要求断开连接!n);return;ta1.append(客户+s+n); catch (ioexception e) e.printstacktrace();/* * 流的关闭窗体 */public void close()try if(br!=null) br.close();if(ps!=null) ps.close(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace();4. clientview.java代码:package edu.huaxia.c
36、hatclient;import java.awt.*;import java.io.ioexception;import .socket;import .unknownhostexception; /* * author thomas *启动客户端的窗体 */public class clientview extends jframe private static final long serialversionuid = 1l;private jlabel l0,l1,l2;private jtextfield ip,port;private jbutton start;public cl
37、ientview()super(客户端启动);l0 = new jlabel(套接字信息);l1 = new jlabel(服务器ip:);l2 = new jlabel(服务器port:);ip = new jtextfield();port = new jtextfield();start = new jbutton(产生客户端);/产生监听,实例化内部类start.addactionlistener(new actionlistener()public void actionperformed(actionevent e) string ip1 = ip.gettext();int po
38、rt1 = integer.parseint(port.gettext();socket socket = null;try /定义套接字:ip+端口号socket = new socket(ip1,port1);tcpclient tc = new tcpclient(socket);tc.post();tc.close();tc.dispose(); catch (unknownhostexception e1) joptionpane.showmessagedialog(null, 套接字错误!); catch (ioexception e3) joptionpane.showmessa
39、gedialog(null, 套接字错误!);try socket.close(); catch (ioexception e1) / todo auto-generated catch blocke1.printstacktrace(););font font = new font(华文楷体,font.plain,18);l0.setfont(font);l0.setforeground(color.red);this.add(start);this.add(l0);this.add(l1);this.add(l2);this.add(ip);this.add(port);this.setl
40、ayout(null);this.setbackground(color.light_gray);this.setbounds(150, 150, 300, 300);this.setvisible(true);l0.setbounds(100, 15, 100, 30);l1.setbounds(55, 55, 60, 30);ip.setbounds(135, 55, 100, 30);l2.setbounds(55, 105, 70, 30);port.setbounds(135, 105, 100, 30);start.setbounds(100, 155, 100, 30);publ
41、ic static void main(string args) new clientview();5. tcpclient.java代码:package edu.huaxia.chatclient;import java.awt.*;import java.io*import .socket;import .unknownhostexception;import java.text.simpledateformat;import java.util.date;import javax.swing.*;/* * author thomas * 客户端窗体 */public class tcpc
42、lient extends jframe implements actionlistenerprivate static final long serialversionuid = 1l;private jlabel l1,l2,l3,l4;private jpanel p1,p2,p3,p4,p5;private textarea ta1,ta2;private jbutton send,quit;private bufferedreader br;private printstream ps;private socket socket;private boolean b=true;/* *
43、 客户端窗体的基本属性 */public tcpclient(socket socket)super(神话聊天室客户端);this.socket = socket;try /定义套接字输入输出流br = new bufferedreader(new inputstreamreader(socket.getinputstream();ps = new printstream(socket.getoutputstream();catch (ioexception e) e.printstacktrace();l2 = new jlabel(客户ip:+socket.getlocaladdress(
44、);l4 = new jlabel(客户名字:+socket.getlocaladdress().gethostname();l1 = new jlabel(主机ip:+socket.getinetaddress();l3 = new jlabel(主机名字:+socket.getinetaddress().gethostname();border b1 = borderfactory.createtitledborder(聊天信息显示窗体);border b2 = borderfactory.createtitledborder(发送信息窗体);border b3 = borderfacto
45、ry.createtitledborder(对方基本信息);border b4 = borderfactory.createtitledborder(本人基本信息);p1 = new jpanel();p1.setborder(b1);p2 = new jpanel();p2.setborder(b2);p3 = new jpanel();p3.setborder(b3);p4 = new jpanel();p4.setborder(b4);p5 = new jpanel();ta1 = new textarea(10,47);ta2 = new textarea(11,67);font f
46、= new font(default,font.plain,18);ta1.setfont(f);ta1.setforeground(color.red);send = new jbutton(发送);send.addactionlistener(this);/产生监听quit = new jbutton(关闭);quit.addactionlistener(this);/产生监听this.setlayout(null);this.add(p1);this.add(p2);this.add(p3);this.add(p4);this.add(p5);p1.add(ta1);p2.add(ta2
47、);p3.add(l1);p3.add(l3);p4.add(l2);p4.add(l4);p5.add(send);p5.add(quit);this.setbounds(100,100, 720, 600);p1.setbackground(color.orange);p1.setbounds(0, 0, 500, 280);p3.setbackground(color.pink);p3.setbounds(505, 0, 190, 280);l1.setbounds(507, 5, 187, 30);l2.setbounds(507, 37, 187, 30);p2.setbackgro
48、und(color.darkgray);p2.setbounds(0, 290, 500, 220);p4.setbackground(color.light_gray);p4.setbounds(505, 290, 190, 220);l2.setbounds(507, 295, 187, 30);l4.setbounds(507, 327, 187, 30);p5.setbounds(0, 520, 500, 40);this.setvisible(true);/* * 接受输入流的信息 */public void post() try string s=null;while(b)/对时间
49、对象的处理simpledateformat sdf = new simpledateformat(yyyy-mm-dd hh:mm:ss);date date = new date();s=br.readline();if(s!=null|s!=)/如果得到的是quit就返回方法if(quit.equalsignorecase(s) ta1.append(服务器+sdf.format(date)+要求断开连接!n);return;ta1.append(服务器+s+n); catch (unknownhostexception e) / todo auto-generated catch blocke.printstacktrace(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace();/* * 流的关闭 */public void close()try if(br!=null) br.clo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动物胶在环境保护领域的应用考核试卷
- 合成纤维单体市场发展趋势分析考核试卷
- 网络安全技术研究与应用合同
- 专科医院医院突发事件应对知识考核试卷
- PR公关活动策划执行合同
- 农业农业机械产业环境保护整合服务批发考核试卷
- 公路客运法律法规知识考核试卷
- 有关物流的课程设计
- 幼儿英语hello课程设计
- 高跟鞋采购合同范本
- 2024年执业医师考试-中医师承及确有专长考核笔试考试历年高频考点试题摘选含答案
- 光伏支架巡回检查、维护管理制度
- 小班户外运动案例分析与反思
- 天津市河东区2023-2024学年九年级上学期期末数学试题
- 岩体力学与工程智慧树知到期末考试答案章节答案2024年合肥工业大学
- 精氨酸在肥胖中的作用
- 2024年医药卫生考试-医院信息科笔试参考题库含答案
- 微观经济学(对外经济贸易大学)智慧树知到期末考试答案2024年
- 初中语文文言文《狼》习题
- 医院总值班培训课件
- MOOC 创新创业学-西安工业大学 中国大学慕课答案
评论
0/150
提交评论