基于GUI的网络通信程序设计.docx
- 文档编号:4545382
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:9
- 大小:63.30KB
基于GUI的网络通信程序设计.docx
《基于GUI的网络通信程序设计.docx》由会员分享,可在线阅读,更多相关《基于GUI的网络通信程序设计.docx(9页珍藏版)》请在冰豆网上搜索。
基于GUI的网络通信程序设计
《Java程序设计》实验报告
--实验3
实验室:
2014年12月10日
学院
计算机与信息学院
专业班级
姓名
成绩
课程
名称
Java程序设计
实验项目
名称
实验三基于GUI的网络通信程序设计
指导
教师
教师评语
教师签名:
年月日
1、实验目的
1.掌握Java中GUI程序的编写,包括事件监听机制。
2.掌握Java的网络通信编程,ServerSocket,Socket类的使用。
3.掌握Java中多线程的编程,Thread类,Runnable接口的使用。
4.掌握用面向对象的方法分析和解决复杂问题。
2、实验原理
1.利用java.awt和javax.swing包提供的各种组件实现服务器和客户端的界面设计。
2.使用套接字实现基于TCP协议的服务器和客户端。
3.为服务器和客户端界面中的有关组件添加消息相应,实现交互。
三、使用硬件、软件环境
PC计算机一台,配置为CPU为2.6G,内存为4G,硬盘为1T,安装Windows8操作系统。
另外,使用JCreator,JDK1.8.0等软件
四、实验过程、步骤及原始记录(算法、原程序、测试结果,分析等)
1.实验过程:
首先实现界面的编写,之后使用套接字实现基于TCP协议的通信,再设置监视
器,为相应的组件添加消息相应。
2.源程序:
1.客户端程序:
KeHuDuan.java
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjava.io.*;
import.*;
importjavax.swing.*;
publicclassKeHuDuan{
publicstaticvoidmain(String[]args){
MyFrameclient=newMyFrame();
client.setVisible(true);
client.setResizable(false);
client.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
classMyFrameextendsJFrame{
JTextFieldip;
JTextFieldport;
JTextFieldcin;
JTextAreacontent;
JButtonconnect;
JButtonsay;
Socketsocket;
MyFrame(){
init();
ConnectListencListener=newConnectListen();
SayListensListener=newSayListen();
connect.addActionListener(cListener);
say.addActionListener(sListener);
}
voidinit(){
setLayout(newFlowLayout());
setSize(400,400);
setLocation(800,100);
add(newJLabel("Serveip"));
ip=newJTextField("127.0.0.1",8);
add(ip);
add(newJLabel("Serveport"));
port=newJTextField("8888",8);
add(port);
connect=newJButton("connect");
add(connect);
content=newJTextArea(16,35);
JScrollPanescroll=newJScrollPane(content);
add(scroll);
add(newLabel("Say:
"));
cin=newJTextField(25);
add(cin);
say=newJButton("say");
add(say);
}
classConnectListenimplementsActionListener{
intportNum;
publicvoidactionPerformed(ActionEvente){
connect.setEnabled(false);
try{
portNum=Integer.parseInt(port.getText());
socket=newSocket(ip.getText(),portNum);
ClientThreadct=newClientThread();
ct.start();
}
catch(Exceptionex){
}
}
}
classSayListenimplementsActionListener{
Stringstr;
publicvoidactionPerformed(ActionEvente){
try{
PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
str=cin.getText();
if(!
str.isEmpty()){
out.println(str);
content.append("me:
"+str+"\n");
out.flush();
}
cin.setText("");
}
catch(Exceptionex){
}
}
}
classClientThreadextendsThread{
publicvoidrun(){
try{
BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));
Stringstr;
while(true){
str=in.readLine();
//System.out.println("\a");
content.append(str+"\n");
}
}
catch(Exceptionex){
}
}
}
}
2.服务器端程序:
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjava.io.*;
import.*;
importjavax.swing.*;
publicclassFuWuQi{
publicstaticvoidmain(String[]args){
MyFrameserve=newMyFrame();
serve.setVisible(true);
serve.setResizable(false);
serve.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
classMyFrameextendsJFrame{
JTextFieldport;
JButtonstart;
JTextAreacontent;
JTextFieldcin;
JButtonsay;
Socketsocket;
MyFrame(){
init();
StartListensListen=newStartListen();
SayListenstListen=newSayListen();
start.addActionListener(sListen);
say.addActionListener(stListen);
}
voidinit(){
setLayout(newFlowLayout());
setSize(400,400);
setLocation(400,100);
add(newJLabel("Port:
"));
port=newJTextField("8888",25);
add(port);
start=newJButton("Start");
add(start);
content=newJTextArea(15,35);
JScrollPanescroll=newJScrollPane(content);
add(scroll);
add(newJLabel("Say:
"));
cin=newJTextField(26);
add(cin);
say=newJButton("Say");
add(say);
}
classStartListenimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
start.setEnabled(false);
try{
ServerSockets=newServerSocket(Integer.parseInt(port.getText()));
socket=s.accept();
PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
out.println("连接成功");
content.append("连接成功"+"\n");
ServerThreadst=newServerThread();
st.start();
}
catch(Exceptionex){
}
}
}
classSayListenimplementsActionListener{
Stringstr;
publicvoidactionPerformed(ActionEvente){
try{
PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
str=cin.getText();
if(!
str.isEmpty()){
out.println(str);
content.append("me:
"+str+"\n");
out.flush();
}
cin.setText("");
}
catch(Exceptionex){
}
}
}
classServerThreadextendsThread{
publicvoidrun(){
try{
BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));
Stringstr;
while(true){
str=in.readLine();
content.append(str+"\n");
}
}
catch(Exceptionex){
}
}
}
}
3.测试结果:
五、实验结论、分析、思考题与心得体会
通过本次实验,我有以下几方面的收获、认识和体会:
1.学会了编写带有图形化界面的程序。
2.简单掌握了JFrame、JLabel、JTextField、JButton和JPanel等组件的
方法。
3.能够独立解决部分编译和执行过程中的错误信息。
4.掌握事件处理的方法和常用的布局管理器。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 GUI 网络 通信 程序设计