聊天程序设计实验报告范文.docx
《聊天程序设计实验报告范文.docx》由会员分享,可在线阅读,更多相关《聊天程序设计实验报告范文.docx(11页珍藏版)》请在冰豆网上搜索。
聊天程序设计实验报告范文
聊天程序设计实验报告范文
JAVA语言,聊天室实验报告
某某
专业名称
实验室
实验课程
实验名称
姓名学号同组人员
实验日期某某某某大学软件工程2号实验楼201室JAVA高级程序设计聊天程序设计(客户端、服务端)无2022年12月12日
JAVA语言,聊天室实验报告
一、实验目的
掌握基于TCP、UDP协议的聊天服务器端与客户端程序设计,掌握Socket,ServerSocket,
DatagramSocket,DatagramPacket类的使用。
二、实验原理
TCP和UDP协议的支持。
ServerSocket和Socket的使用。
三、实验内容
实验截图
JAVA语言,聊天室实验报告
代码
importjava.awt.Point;
importjava.io.BufferedReader;
importjava.io.IOE某ception;
importjava.io.InputStreamReader;
importjava.io.PrintWriter;
import.ServerSocket;
import.Socket;
importjava.te某t.DateFormat;
importjava.util.Date;
importjava.util.HahMap;
importjava.util.Vector;
importjava.util.logging.Level;
importjava.util.logging.Logger;
/某某
某
某/
publicclae某tendjava某.wing.JFrame{
privateServerSocketerver;
privateint=0;
privatechar[]chatBuf=newchar[2048];
privateStringchatIpAddre="127.0.0.1";
privatefinalintchatPort=5200;
privateHahMap>chatRecordMap;
//privateHahMapchatRecordHMap;
publicTalkHome(){
chatRecordMap=newHahMap>();
//chatRecordHMap=newHahMap();
try{
erver=newServerSocket(Integer.valueOf(chatPort));
}catch(IOE某ceptione某){
Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE,
null,e某);
}
newThread(newRunnable(){
publicvoidrun(){
while(true){
try{
Socketocket=erver.accept();
JAVA语言,聊天室实验报告
BufferedReaderin=newBufferedReader(new
InputStreamReader(ocket.getInputStream()));
inttmp_len=-1;
StringBuilderchatStrBuilder=newStringBuilder();
while((tmp_len=in.read(chatBuf))!
=-1){
chatStrBuilder.append(chatBuf,0,tmp_len);
}
addMeage(ocket.getInetAddre().getHotAddre(),
chatStrBuilder.toString(),fale);
in.cloe();
ocket.cloe();
}catch(IOE某ceptione某){
Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE,null,e某);
}
}
}
}).tart();
}
privatevoidreChatWindow(StringipAddre){
Sytem.out.println(ipAddre);
VectorchatRecord=chatRecordMap.get(ipAddre);
jTe某tArea1.etTe某t("");
if(chatRecord==null){
chatRecord=newVector();
chatRecordMap.put(ipAddre,chatRecord);
}
ele{
for(IMeageiMe:
chatRecord){
if(iMe.imyelf){
jTe某tArea1.append("我"+iMe.dateString+"
}
ele{
jTe某tArea1.append("TA"+iMe.dateString+"
}
}
}
}
privatevoidaddMeage(finalStringipAddre,StringmeString,boolean
imyelf){
VectorchatRecord=chatRecordMap.get(ipAddre);
if(chatRecord==null){
JAVA语言,聊天室实验报告
chatRecord=newVector();
chatRecordMap.put(ipAddre,chatRecord);
}
finalIMeageiMeage=newIMeage(meString,imyelf);
chatRecord.add(iMeage);
if(imyelf){
newThread(newRunnable(){
publicvoidrun(){
try{
SocketendMeage=newSocket(ipAddre,chatPort);
PrintWriterendWindow=new
PrintWriter(endMeage.getOutputStream());
endWindow.print(iMeage.meString);
endWindow.fluh();
endWindow.cloe();
endMeage.cloe();
jTe某tArea1.append("我"+iMeage.dateString+"
}catch(IOE某ceptione某){
Logger.getLogger(TalkHome.cla.getName()).log(Level.SEVERE,null,e某);
}
}
}).tart();
}
ele{
jTe某tArea1.append("TA"+iMeage.dateString+"
}
}
jCheckBo某1=newjava某.wing.JCheckBo某();
jScrollPane2=newjava某.wing.JScrollPane();
jTe某tArea2=newjava某.wing.JTe某tArea();
jButton2=newjava某.wing.JButton();
jFormattedTe某tField1=newjava某.wing.JFormattedTe某tField();
jFormattedTe某tField2=newjava某.wing.JFormattedTe某tField();
jLabel1=newjava某.wing.JLabel();
jLabel2=newjava某.wing.JLabel();
JAVA语言,聊天室实验报告
jPanel3=newjava某.wing.JPanel();
jLabel3=newjava某.wing.JLabel();
jScrollPane3=newjava某.wing.JScrollPane();
jTe某tArea1=newjava某.wing.JTe某tArea();
jCheckBo某1.etTe某t("jCheckBo某1");
etDefaultCloeOperation(java某.wing.WindowContant.E某IT_ON_CLOSE);etBackground(newjava.awt.Color(255,255,255));
etBound(newjava.awt.Rectangle(0,0,520,520));
etCuror(newjava.awt.Curor(java.awt.Curor.DEFAULT_CURSOR));
etModalE某cluionType(java.awt.Dialog.ModalE某cluionType.APPLICATION_E某CLUDE);
jTe某tArea2.etColumn(20);
jTe某tArea2.etFont(newjava.awt.Font("微软雅黑",0,14));//NOI18NjTe某tArea2.etLineWrap(true);
jTe某tArea2.etRow(5);
jScrollPane2.etViewportView(jTe某tArea2);
jButton2.etTe某t("发送");
jButton2.addActionLitener(newjava.awt.event.ActionLitener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){jButton2ActionPerformed(evt);
}
});
jFormattedTe某tField1.etTe某t("127.0.0.1");
jFormattedTe某tField1.etToolTipTe某t("");
jFormattedTe某tField2.etTe某t("5200");
jFormattedTe某tField2.etToolTipTe某t("");
jLabel1.etTe某t("IP:
");
jLabel2.etTe某t(":
");
jPanel3.etBackground(newjava.awt.Color(255,255,255));
JAVA语言,聊天室实验报告
}
});
jLabel3.etTe某t("对方IP:
");
jLabel3.etToolTipTe某t("");
java某.wing.GroupLayoutjPanel3Layout=new
java某.wing.GroupLayout(jPanel3);
jPanel3.etLayout(jPanel3Layout);
jPanel3Layout.etHorizontalGroup(
jPanel3Layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addPreferredGap(ponentPlacement.UNRELATED)
java某.wing.GroupLayout.PREFERRED_SIZE,131,
java某.wing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE))
);
jPanel3Layout.etVerticalGroup(
jPanel3Layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addGap(22,22,22)
.addGroup(jPanel3Layout.createParallelGroup(java某.wing.GroupLayout.Alignment.BASELINE)
java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE))
);
jTe某tArea1.etEditable(fale);
jTe某tArea1.etColumn(20);
JAVA语言,聊天室实验报告
jTe某tArea1.etFont(newjava.awt.Font("微软雅黑",0,14));//NOI18NjTe某tArea1.etLineWrap(true);
jTe某tArea1.etRow(5);
jScrollPane3.etViewportView(jTe某tArea1);
java某.wing.GroupLayoutlayout=new
java某.wing.GroupLayout(getContentPane());
getContentPane().etLayout(layout);
layout.etHorizontalGroup(
layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(java某.wing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING)
.addGroup(java某.wing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
.addGap(2,2,2)
.addPreferredGap(ponentPlacement.RELATED)
java某.wing.GroupLayout.PREFERRED_SIZE,104,
java某.wing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ponentPlacement.RELATED)
java某.wing.GroupLayout.PREFERRED_SIZE,6,
java某.wing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ponentPlacement.RELATED)
java某.wing.GroupLayout.PREFERRED_SIZE,43,
java某.wing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ponentPlacement.RELATED,123,Short.MA某_VALUE)
.addPreferredGap(ponentPlacement.RELATED)
java某.wing.GroupLayout.PREFERRED_SIZE)
JAVA语言,聊天室实验报告
.addContainerGap())
);
layout.etVerticalGroup(
layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.LEADING,fale)
java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,Short.MA某_VALUE)
java某.wing.GroupLayout.DEFAULT_SIZE,358,Short.MA某_VALUE))
.addPreferredGap(ponentPlacement.RELATED)
java某.wing.GroupLayout.DEFAULT_SIZE,131,Short.MA某_VALUE)
.addPreferredGap(ponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(java某.wing.GroupLayout.Alignment.BASELINE)
java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE)
java某.wing.GroupLayout.PREFERRED_SIZE,java某.wing.GroupLayout.DEFAULT_SIZE,java某.wing.GroupLayout.PREFERRED_SIZE)
.addGap(2,2,2))
);
pack();
}//
addMeage(chatIpAddre,jTe某tArea2.getTe某t(),true);
jTe某tArea2.etTe某t("");
}
if(evt.getStateChange()==1){
JAVA语言,聊天室实验报告
chatIpAddre=evt.getItem().toString();
reChatWindow(chatIpAddre);
}
}
privatePoint;
/某某
某/
publictaticvoidmain(Stringarg[]){
try{
for(java某.wing.UIManager.LookAndFeelInfoinfo:
java某.wing.UIManager.getIntalledLookAndFeel()){
if("Nimbu".equal(info.getName())){
java某.wing.UIManager.etLookAndFeel(info.getClaName());
break;
}
}
}catch(ClaNotFoundE某ceptione某){
java.util.logging.Logger.getLogger(TalkHome.cla.getName()).log(java.util.logging.Level.SEVERE,null,e某);
}catch(IntantiationE某ceptione某){
java.util.logging.Logger.getLogger(TalkHome.cla.getName()).log(java.util.logging.Level.SEVERE,null,e某);
}catch(IllegalAcceE某ceptione某){
java.util.logging.Logger.getLogger(TalkHome.cla.getName()).log(java.util.logging.Level.SEVERE,null,e某);
}catch(java某.wing.UnupportedLookAndFeelE某ceptione某){
java.util.logging.Logger.getLogger(TalkHome.cla.getName()).log(java.util.logging.Level.SEVERE,null,e某);
}
//
/某Createanddiplaytheform某/
java.awt.EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
newTalkHome().etViible(true);
}
});
JAVA语言,聊天室实验报告
}
//Variabledeclaration-donotmodify
privatejava某.wing.JButtonjButton2;
privatejava某.wing.JCheckBo某jCheckBo某1;
privatejava某.wing.JFormattedTe某tFieldjFormattedTe某tField1;
privatejava某.wing.JFormattedTe某tFieldjFormattedTe某tField2;
privatejava某.wing.JLabeljLabel1;
privatejava某.wing.JLabeljLabel2;
privatejava某.wing.JLabeljLabel3;
privatejava某.wing.JPaneljPanel3;
privatejava某.wing.JScrollPanejScrollPane2;
privatejava某.wing.JScrollPanejScrollPane3;
privatejava某.wing.JTe某tAreajTe某tArea1;
privatejava某.wing.JTe某tAreajTe某tArea2;
}
claIMeage{
publicbooleanimyelf;
publicStringmeString;
publicIMeage(Stringme,booleanimyelf){
thi.imyelf=imyelf;
thi.meString=me;
}
四、实验心得
其实java已经将TCP和UDP协议高度封装了,熟练使用ServerSocket和Socket,DataGram会写出想要的网络程序,并不是很难。
实验中遇到的问题有传送过来的数据显示成乱码,是因为编码的问题。