java实验报告网络基础.docx
- 文档编号:8344050
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:14
- 大小:346.98KB
java实验报告网络基础.docx
《java实验报告网络基础.docx》由会员分享,可在线阅读,更多相关《java实验报告网络基础.docx(14页珍藏版)》请在冰豆网上搜索。
java实验报告网络基础
实验八网络编程基础
1.实验目的
(1)掌握Socket通信。
(2)掌握UDP通信
2.实验内容
实验题1使用InetAddress类的方法获取
运行结果:
主要代码:
packagepackage1;
import.*;
publicclassEx7_1{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
try{
InetAddressmyNet=InetAddress.getByName("");
System.out.println(myNet.toString());
System.out.println(InetAddress.getLocalHost().toString());
}catch(UnknownHostExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
实验题2使用URL类下载西北农林科技大学首页
运行结果:
主要代码:
publicvoidrun(){
try{
intn=0;
intsum=0;
jEditorPane1.setText(null);
url=newURL("http:
//"+jTextField1.getText().trim());
InputStreamin=url.openStream();
while((n=in.read(b))!
=-1){
sum+=n;
}
jEditorPane1.setPage(url);
jTextField2.setText(""+sum);
}
catch(Exceptione1){
jTextField1.setText(""+e1);
}
}
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
if(!
(thread.isAlive())){
thread=newThread(this);
try{thread.start();
}
catch(Exceptione){
jTextField1.setText(""+url);
}
}
}
实验题3利用Socket类和ServerSocket类编写一个C/S程序,实现C/S通信。
客户端向服务器端发送Time命令,服务器端接受到该字符串后将服务器端当前时间返回给客户端;客户端向服务器端发送Exit命令,服务器端向客户端返回“Bye”后退出。
[基本要求]编写完整程序;两人一组,一个作为服务器端,另一人作为客户端。
服务器端和客户端都需要打印出接受到的消息和发出的命令。
运行结果:
服务器端客户端
主要代码:
服务器端:
packagepackage3;
importjava.io.*;
import.*;
importjava.util.Date;
publicclassServer{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
ServerSocketserver=null;
Socketyou=null;
InputStreamReaderin=null;
OutputStreamWriterout=null;
Datetoday=newDate();
try{
server=newServerSocket(18949);
}
catch(IOExceptione){
System.out.println(e);
}
try{
System.out.println("等待客户连接……");
you=server.accept();
in=newInputStreamReader(you.getInputStream());
out=newOutputStreamWriter(you.getOutputStream());
BufferedWriterbout=newBufferedWriter(out);
BufferedReaderbin=newBufferedReader(in);
Stringtemp=null;
while(true){
System.out.println("等待客户信息");
temp=bin.readLine();
if(temp.equals("Exit")){
System.out.println("收到客户信息"+temp);
bout.write("Bye");
bout.newLine();
bout.flush();
break;
}
System.out.println("收到客户信息"+temp);
bout.write(today.toString());
bout.newLine();
bout.flush();
}
server.close();
you.close();
}
catch(IOExceptione1){
System.out.println("客户端断开连接……"+e1);
}
}
}
客户端:
packagepackage3;
importjava.io.*;
import.*;
publicclassClient{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Socketmysocket;
InputStreamReaderin=null;
OutputStreamWriterout=null;
try{
mysocket=newSocket("127.0.0.1",18949);
in=newInputStreamReader(mysocket.getInputStream());
out=newOutputStreamWriter(mysocket.getOutputStream());
BufferedWriterbout=newBufferedWriter(out);
BufferedReaderbin=newBufferedReader(in);
while(true){
bout.write("Time");
System.out.println("Clientsend:
Time");
bout.newLine();
bout.flush();
Stringtemp=null;
temp=bin.readLine();
System.out.println("Fromserver:
"+temp);
bout.write("Exit");
System.out.println("Clientsend:
Exit");
bout.newLine();
bout.flush();
temp=bin.readLine();
if(temp.equals("Bye")){
System.out.println("Fromserver:
"+temp);
break;
}
}
mysocket.close();
}
catch(Exceptione){
System.out.println(e);
}
}
}
实验题4编写一数据报通信程序,实现简单的聊天功能。
图3.14聊天程序界面
[基本要求]两人一组编写完整程序。
“聊天内容”和“输入文本”分别为当前聊天的历史信息和当前要传送出去的聊天文本。
“确定”、“清空”、“退出”三个按钮分别实现发送当前聊天文本、清空当前聊天文本和退出系统的功能。
运行结果:
主要代码:
publicvoidrun(){
jTextArea1.append("开始接收信息:
"+"\n");
DatagramPacketpack=null;
DatagramSocketmailPack=null;
bytedata[]=newbyte[8192];
try{
pack=newDatagramPacket(data,data.length);
mailPack=newDatagramSocket(29249);
}
catch(Exceptione){
System.out.println(e+"\n");
}
while(true){
if(mailPack==null){
break;
}
else{
try{
mailPack.receive(pack);
Stringmessage=newString(pack.getData(),0,pack.getLength());
if(message.equals("bye")){
jTextArea1.append("对方已下线!
"+"\n");
break;
}
jTextArea1.append("接收到信息:
"+message+"\n");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
privatevoidoKActionPerformed(ActionEventevt){
//System.out.println("oK.actionPerformed,event="+evt);
//TODOaddyourcodeforoK.actionPerformed
Stringmessage=jTextField1.getText();
bytebuffer[]=message.trim().getBytes();
jTextArea1.append("发出的信息:
"+message+"\n");
try{
InetAddressaddress=InetAddress.getByName("127.0.0.1");
DatagramPacketdataPack=newDatagramPacket(buffer,buffer.length,address,8976);
DatagramSocketmailPack=newDatagramSocket();
mailPack.send(dataPack);
}
catch(Exceptione){}
}
privatevoidclearActionPerformed(ActionEventevt){
//System.out.println("clear.actionPerformed,event="+evt);
//TODOaddyourcodeforclear.actionPerformed
jTextField1.setText("");
}
privatevoidquitActionPerformed(java.awt.event.ActionEventevt){
//TODOaddyourhandlingcodehere:
Stringmessage="bye";
bytebuffer[]=message.trim().getBytes();
jTextArea1.append("您已退出程序!
"+"\n");
try{
InetAddressaddress=InetAddress.getByName("127.0.0.1");
DatagramPacketdataPack=newDatagramPacket(buffer,buffer.length,
address,inportnum);
DatagramSocketmailPack=newDatagramSocket();
mailPack.send(dataPack);
}catch(Exceptione){
}
}
实验题5客户机之间通过服务器交换数据。
提示:
为了适应传输各种类型的数据,必须统一客户机的数据格式,为此可以将数据封装在一个对象中,数据传输以对象的形式传输。
因此必须定义一个数据封装的类,此类实现Serializable接口。
运行结果:
将对象写入文本
从文本读取打印结果
主要代码:
packagepackage5;
importjava.io.Serializable;
publicclassStudentimplementsSerializable{
Stringname=null;
intage=0;
publicStudent(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringtoString(){
return("姓名:
"+name+"年龄:
"+age);
}
}
packagepackage5;
importjava.io.*;
publicclassObjectInFile{
publicvoidwriterObject(){
FileoutF=newFile("object.txt");
Student[]s=newStudent[4];
s[0]=newStudent("1sadas",21);
s[1]=newStudent("2qwert",22);
s[2]=newStudent("3yuiop",23);
s[3]=newStudent("4mnbbv",24);
try{
FileOutputStreamfileOut=newFileOutputStream(outF);
ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);
for(inti=0;i<4;i++){
objectOut.writeObject(s[i]);
}
objectOut.close();
fileOut.close();
}
catch(IOExceptione){
System.out.println(e);
}
}
}
packagepackage5;
importjava.io.*;
publicclassObjectOutFile{
publicvoidreaderObject(){
FileoutF=newFile("object.txt");
Students=newStudent("",0);
try{
FileInputStreamfileIn=newFileInputStream(outF);
ObjectInputStreamobjectOut=newObjectInputStream(fileIn);
for(inti=0;i<4;i++){
s=(Student)objectOut.readObject();
System.out.println(s.toString());
}
objectOut.close();
fileIn.close();
}
catch(IOExceptione){
System.out.println(e);
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
3、实验总结:
刚开始做这次实验时,前两道题目感觉相对比较简单,很快就写完了。
在做第三题的时候就遇到了字符串的发送与接收不一致,接收到的字符串和发送的不一致就导致了服务器端不能正确的给客户端回馈信息。
最后使用了BufferedWriter、BufferedWriter这两个类才解决了这个问题。
还有UDP通信时端口占用也带来了很多的麻烦,在写第五题是感觉不知怎么入手,所以就把对象序列化后写入文件在读取出来。
经过这次试验,还是掌握了UDP通信和Socket通信,还复习了一下图形界面和添加响应事件。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 实验 报告 网络 基础