《Java技术》实验报告 2文档格式.docx
- 文档编号:20259520
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:11
- 大小:18.52KB
《Java技术》实验报告 2文档格式.docx
《《Java技术》实验报告 2文档格式.docx》由会员分享,可在线阅读,更多相关《《Java技术》实验报告 2文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
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("
South.add(this.sfTF);
South.add(this.say);
this.add(South,BorderLayout.SOUTH);
//自动调整窗口大小
pack();
}
//监听器类
classSFListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Strings=e.getActionCommand();
if("
==s){//start操作
try{
start.setEnabled(false);
inti=Integer.parseInt(port.getText());
sfTA.append("
ServerPort:
"
+port.getText()+"
\n"
server=newServerSocket(i);
client=server.accept();
aclientconnect...\n"
ServerThreadsfST=newServerThread();
//
sfST.start();
}
catch(Exceptionce){
ce.printStackTrace();
elseif("
==s){//say操作
PrintWriterss=newPrintWriter(client.getOutputStream());
Stringstr=sfTF.getText();
if(str!
="
){
sfTA.append("
Serversay:
+str+"
ss.write("
+str+"
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+"
s=br.readLine();
}
catch(Exceptionre){
re.printStackTrace();
}
//主类,启动服务器端
publicclassSocketServer{
publicstaticvoidmain(String[]args){
SFramesf=newSFrame("
服务器"
}
客户端程序:
classCFrameextendsFrame
{
Socketclient=null;
TextFieldserverport=newTextField("
TextFieldserverip=newTextField("
127.0.0.1"
Buttonconnect=newButton("
connect"
TextAreacfTA=newTextArea(20,60);
TextFieldcfTF=newTextField(40);
Buttonsay=newButton("
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);
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("
South.add(this.cfTF);
South.add(this.say);
this.add(South,BorderLayout.SOUTH);
//自动调整窗口大小
pack();
//监听器类
classCFListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Strings=e.getActionCommand();
if("
==s){
try{
connect.setEnabled(false);
inti=Integer.parseInt(serverport.getText());
cfTA.append("
SocketConnectIP:
+serverip.getText()+"
\nConnectPort:
+serverport.getText()+"
client=newSocket(serverip.getText(),i);
connect...\n"
ClientThreadcfCT=newClientThread();
//
cfCT.start();
catch(Exceptionce){
ce.printStackTrace();
elseif("
Stringstr=cfTF.getText();
PrintWritercc=newPrintWriter(client.getOutputStream());
if(str!
){
cc.write("
cc.flush();
cfTA.append("
cfTF.setText("
catch(Exceptionse){
se.printStackTrace();
classClientThreadextendsThread{
publicvoidrun(){
try{
BufferedReaderbr=newBufferedReader(newInputStreamReader(client.getInputStream()));
Strings=br.readLine();
while(!
=null){
cfTA.append(s+"
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 技术 实验 报告