《Java技术》实验报告 2.docx
- 文档编号:7161106
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:11
- 大小:18.52KB
《Java技术》实验报告 2.docx
《《Java技术》实验报告 2.docx》由会员分享,可在线阅读,更多相关《《Java技术》实验报告 2.docx(11页珍藏版)》请在冰豆网上搜索。
《Java技术》实验报告2
《Java技术》实验报告—实验(三)
实验室:
第四机房2014年12月13日
学院
计算机与信息学院
专业班级
计算机13-3班
姓名
王海超
学号
2013211680
实验
名称
基于GUI的网络通信程序设计
指导
教师
路强
教师评语
教师签名:
年月日
一、实验目的
1.掌握Java中GUI程序的编写,包括事件监听机制。
2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。
3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。
4.掌握用面向对象的方法分析和解决复杂问题。
二、实验原理
通过编程完成以下功能:
1.设计一个基于GUI的客户—服务器的通信应用程序
2.点击界面中的【Start】按钮,启动服务器监听服务。
点击界面中的【Connect】按钮与服务器建立链接,并在所示界面中间的多行文本区域显示“Connecttoserver…”字样,当服务器端监听到客户端的连接后,在图1界面中间的多行文本区域追加一行“Clientconnected…”字样,并与客户端建立Socket连接。
3.当图1所示的服务器端和图2所示的客户机端建立Socket连接后,编程实现这两端的数据通信,每次将接收到对方的数据追加显示在多行文本框中。
三、使用硬件、软件环境
PC计算机一台,配置为CPU为2.5HZ,内存为4G,Windows8.1操作系统,eclipse编程软件。
四、实验过程、步骤及原始记录(算法、原程序、测试结果,分析等)
原程序:
服务器端程序:
//服务器端
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjava.io.*;
import.*;
importjavax.swing.*;
//窗体类
classSFrameextendsFrame{
ServerSocketserver=null;
Socketclient=null;
TextFieldport=newTextField("4000");//将端口默认设为4000
Buttonstart=newButton("Start");
TextAreasfTA=newTextArea(20,60);
TextFieldsfTF=newTextField(40);
Buttonsay=newButton("say");
SFListenersfListener=newSFListener();
//初始化
SFrame(Stringtitle){
super(title);
init();//初始化
start.addActionListener(sfListener);
say.addActionListener(sfListener);
//按键监听
addWindowListener(//窗口监听器
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){//关闭窗体
try{
server.close();
}
catch(Exceptionee)
{
ee.printStackTrace();
}
System.exit(0);
}
}
);
this.setVisible(true);
}
//初始化函数
voidinit(){
setLocation(0,0);//窗体位置
setSize(20,10);//窗体大小
setResizable(true);//设置窗体不可由用户调整大小
setBackground(Color.WHITE);//设置窗体背景色
sfTA.setBackground(Color.white);
//BorderLayout.NORTH设置
PanelNorth=newPanel();
North.add(newLabel("port"));
North.add(this.port);
North.add(this.start);
this.add(North,BorderLayout.NORTH);
//BorderLayout.CENTER设置
PanelCenter=newPanel();
Center.add(this.sfTA);
this.add(Center,BorderLayout.CENTER);
//BorderLayout.SOUTH设置
PanelSouth=newPanel();
South.add(newLabel("say"));
South.add(this.sfTF);
South.add(this.say);
this.add(South,BorderLayout.SOUTH);
//自动调整窗口大小
pack();
}
//监听器类
classSFListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Strings=e.getActionCommand();
if("Start"==s){//start操作
try{
start.setEnabled(false);
inti=Integer.parseInt(port.getText());
sfTA.append("ServerPort:
"+port.getText()+"\n");
server=newServerSocket(i);
client=server.accept();
sfTA.append("aclientconnect...\n");
ServerThreadsfST=newServerThread();//
sfST.start();
}
catch(Exceptionce){
ce.printStackTrace();
}
}
elseif("say"==s){//say操作
try{
PrintWriterss=newPrintWriter(client.getOutputStream());
Stringstr=sfTF.getText();
if(str!
=""){
sfTA.append("Serversay:
"+str+"\n");
ss.write("Serversay:
"+str+"\n");
ss.flush();
}
sfTF.setText("");
}
catch(Exceptionse){
se.printStackTrace();
}
}
}
}
//线程类
classServerThreadextendsThread{
publicvoidrun(){
try{
BufferedReaderbr=newBufferedReader(newInputStreamReader(client.getInputStream()));
Strings=br.readLine();
while(!
"clientsay:
bye".equals(s)&&s!
=null){
sfTA.append(s+"\n");
s=br.readLine();
}
}
catch(Exceptionre){
re.printStackTrace();
}
}
}
}
//主类,启动服务器端
publicclassSocketServer{
publicstaticvoidmain(String[]args){
SFramesf=newSFrame("服务器");
}
}
客户端程序:
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjava.io.*;
import.*;
importjavax.swing.*;
//窗体类
classCFrameextendsFrame
{
Socketclient=null;
TextFieldserverport=newTextField("4000");
TextFieldserverip=newTextField("127.0.0.1");
Buttonconnect=newButton("connect");
TextAreacfTA=newTextArea(20,60);
TextFieldcfTF=newTextField(40);
Buttonsay=newButton("say");
CFListenercfListener=newCFListener();
//
CFrame(Stringtitle)
{
super(title);
init();
connect.addActionListener(cfListener);
say.addActionListener(cfListener);
addWindowListener(//窗口监听器
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){//关闭窗体
try{
client.close();
}catch(Exceptionee){
ee.printStackTrace();
}
System.exit(0);
}
}
);
setVisible(true);
}
voidinit(){
setLocation(0,0);//窗体位置
setSize(400,200);//窗体大小
setResizable(true);//设置窗体不可由用户调整大小
setBackground(Color.white);//设置窗体背景色
cfTA.setBackground(Color.white);
//BorderLayout.NORTH设置
PanelNorth=newPanel();
North.add(newLabel("serverip"));
North.add(this.serverip);
North.add(newLabel("serverport"));
North.add(this.serverport);
North.add(this.connect);
this.add(North,BorderLayout.NORTH);
//BorderLayout.CENTER设置
PanelCenter=newPanel();
Center.add(this.cfTA);
this.add(Center,BorderLayout.CENTER);
//BorderLayout.SOUTH设置
PanelSouth=newPanel();
South.add(newLabel("say"));
South.add(this.cfTF);
South.add(this.say);
this.add(South,BorderLayout.SOUTH);
//自动调整窗口大小
pack();
}
//监听器类
classCFListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Strings=e.getActionCommand();
if("connect"==s){
try{
connect.setEnabled(false);
inti=Integer.parseInt(serverport.getText());
cfTA.append("SocketConnectIP:
"+serverip.getText()+"\nConnectPort:
"+serverport.getText()+"\n");
client=newSocket(serverip.getText(),i);
cfTA.append("connect...\n");
ClientThreadcfCT=newClientThread();//
cfCT.start();
}
catch(Exceptionce){
ce.printStackTrace();
}
}
elseif("say"==s){
try{
Stringstr=cfTF.getText();
PrintWritercc=newPrintWriter(client.getOutputStream());
if(str!
=""){
cc.write("clientsay:
"+str+"\n");
cc.flush();
cfTA.append("clientsay:
"+str+"\n");
}
cfTF.setText("");
}
catch(Exceptionse){
se.printStackTrace();
}
}
}
}
classClientThreadextendsThread{
publicvoidrun(){
try{
BufferedReaderbr=newBufferedReader(newInputStreamReader(client.getInputStream()));
Strings=br.readLine();
while(!
"Serversay:
bye".equals(s)&&s!
=null){
cfTA.append(s+"\n");
s=br.readLine();
}
}
catch(Exceptionre){
re.printStackTrace();
}
}
}
}
//主类,启动客户端
publicclassSocketClient{
publicstaticvoidmain(String[]args){
CFramecf=newCFrame("客户端");
}
}
五、实验结论、分析、思考题与心得体会
通过本次实验,我有以下几方面的收获、认识和体会:
1.基本掌握了通信编程的基础,知道了套接字等的使用。
2.加深了对GUI图形用户界面的理解及编程能力。
3.理解了监听器的作用及原理及编程原理。
4.进一步知道了Java编程的强打功能,有激发了对Java的学习兴趣。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java技术 Java技术实验报告 Java 技术 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)