西农java实习八网络编程.docx

上传人:b****1 文档编号:14772568 上传时间:2023-06-27 格式:DOCX 页数:29 大小:325.43KB
下载 相关 举报
西农java实习八网络编程.docx_第1页
第1页 / 共29页
西农java实习八网络编程.docx_第2页
第2页 / 共29页
西农java实习八网络编程.docx_第3页
第3页 / 共29页
西农java实习八网络编程.docx_第4页
第4页 / 共29页
西农java实习八网络编程.docx_第5页
第5页 / 共29页
西农java实习八网络编程.docx_第6页
第6页 / 共29页
西农java实习八网络编程.docx_第7页
第7页 / 共29页
西农java实习八网络编程.docx_第8页
第8页 / 共29页
西农java实习八网络编程.docx_第9页
第9页 / 共29页
西农java实习八网络编程.docx_第10页
第10页 / 共29页
西农java实习八网络编程.docx_第11页
第11页 / 共29页
西农java实习八网络编程.docx_第12页
第12页 / 共29页
西农java实习八网络编程.docx_第13页
第13页 / 共29页
西农java实习八网络编程.docx_第14页
第14页 / 共29页
西农java实习八网络编程.docx_第15页
第15页 / 共29页
西农java实习八网络编程.docx_第16页
第16页 / 共29页
西农java实习八网络编程.docx_第17页
第17页 / 共29页
西农java实习八网络编程.docx_第18页
第18页 / 共29页
西农java实习八网络编程.docx_第19页
第19页 / 共29页
西农java实习八网络编程.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

西农java实习八网络编程.docx

《西农java实习八网络编程.docx》由会员分享,可在线阅读,更多相关《西农java实习八网络编程.docx(29页珍藏版)》请在冰点文库上搜索。

西农java实习八网络编程.docx

西农java实习八网络编程

信息工程学院1

《Java语言程序设计》实验报告

学院:

信息学院班级:

**********姓名:

pprp学号:

**********3成绩:

一、实习目标

(1)描述掌握Socket通信

(2)掌握UDP数据报通信

(3)掌握多线程网络编程

二、实验过程

任务一:

掌握Socket类的使用

在两台机器上分别运行以下服务器端程序和客户端程序,观察程序的多次运

行结果,回答问题

SpublicclassServer{

publicstaticvoidmsintString[]mrgs){

 

实验报告的内容与格式按任课教师的要求书写。

^127.0.0.1

59368

/127.0.0.1:

2018

2018

publicstaticvoidmain(5trinx[]args){Socketsocket=newSocket();//cl

ImetSocketAddressisa■■newInetSocketAddress(2918);try{

socket,connect(isa);//c2

System.out.printIn(socket.getInstAddress()))/c5

System-out.printIn(socketgetPort())\Hc4

System.outHprintln(socket■getLocalSocketAddr'essf)};■-■'r5Systemroot►printIn(socket.getLocalPort(});//c6

socket*elose();

}cdtch(lOExceptione)(

System.out.println(");

}

观察服务器端和客户端的输出,说明添加注释的每行代码作用。

截图:

两次服务器与客户端的输出,可以发现两次所用到的端口是随机生成的是不一致的。

/127.0.9,1

2018

/127.0,0,1:

59368

59368

/127.0.0*1

2018

/127,0.9.1:

59898

59898

|/127,0.0,1

59898

/127.0.0.1:

2018

2918

代码如下:

packageworkl;

importjava.io.10Exception;!

I

publicclassServer{

public百t冃ticvoidrnain(S七厂in^[]args){

ServersocketsSocket=null;

Sacketsocket=null;

try{

sSocket=newServerSock^t(2018;;

}catch(IOExceptionel){

System.out.printing"JI□已龍占用!

M);

try(

socket=^Socket,accept{)j

System・十・p「jj】L]ji(5

System・pr*int].ri(5CKl

System*out»println(socket.getLocalSocketAddress());System.out.printIn(sockEt・gatL(X21P°rt());

}catch(IOExceptione){

System.out.printin(",PJ;

}

}

}

packageworkl;

innportjava.io.IOExwptiorc」

publicclasstlient{

publicstaticvoidniaini(St_ring[]dr^s)throwsIOException{

SocketEgkPt=newSocketf)j//cl

InetSocketAddressisa=newInetSocketAddre5s("127.0.e.l',2€lS};try(

socket,connect(isa);//c2

System.out.println(socket,^etInetAdcire5s());//cJ

System»out,printin(socket.getPort());"S

System*out+println(socket•gctLocalSocketAddrcs&Q);//cs

System”out”printin(sock^t.getLoeaIPort());//c6

}catch(IOExcept±on电){

System.out.printl器丘常、”);

LrULket.cluse[);

I}

}

问题回答:

S1:

实例化ServerSocket对象,并指定服务器中的端口为2018

S2ServerSocket对象的accept()方法示例化Socket对象,并阻塞进程,等待用户端的连接

S3:

打印服务器端套接字连接的IP地址

S4:

打印服务器端套接字连接的远程端口

S5:

得到服务器端套接字绑定的本地IP地址及端口

S6:

打印服务器端套接字绑定的本地端口

C1:

实例化Socket对象

C2:

将InetSocketAddress类实例化的对象中所包含的服务器主机IP及端口,

调用connect()方法,传入至Socket类中,与服务器进行连接

C3:

打印用户端套接字连接的IP地址

C4:

打印用户端套接字连接的远程端口

C5:

获取用户端套接字绑定的本地IP地址及端口

C6:

打印用户端套接字绑定的本地端口

任务二:

使用TCP协议实现文件传送

在当前项目的根目录新建两个文件夹:

“source”和“destination”,在source中放置两个文件:

“cartoon.jpg”以及“file.docx”。

这两个文件见实习附件。

实现一个服务器端程序Server,服务器端可以通过文件流直接读取文件内容。

实现一个客户端程序Client,客户端程序运行后,提示用户输入文件名。

如,用户在客户端输入“file.docx”并回车,则程序通过TCP协议读取服务器端的数据,将该文件传送一个副本保存在“destination”目录中。

fillName:

卡il巳■do匸x

服务器:

传送內容

文件发送亮毕!

fileName:

cartacn,jpg

服务器:

传送内容

文件发送完毕!

■.Zz-Practice8th

丿ISsrc

▲fflwork!

i(T)Client.java

P[7|ServerJava

JJgwork2

D[7|Client.java

>J]Server.java

0Jgwork3

t>®work4

t>呱JRE浆统库:

JavaSE-1.7]

・Qydestination

二cartoonjpg创file.docx

•Gsource

匚cartoonjpg

回]file.docx

代码截图:

Server.java

packagework2;

importjava.io*DataInputStream;_

publicclassServer{

SprverSockptss=null;

Socketsocket三null;

FilelnputStreamfis=null;

DataOutputStreamdos=null;

DataTnput^tromnidi<;=null;

publicSer'^er'O{

try{ss=newServerSocket(5036);

socket=ss.accept(};

dos-newDataOutputs七厂皂日口(50匚比£七・呂亡〉;dis=newDataInputStream(socket•呂etlnputytFe日rn());

}catch(IOExceptione){

System,out.printing"服务器:

琏接失败");|

e,printStackTrace();

}

}

publicvoidinteract()-(

while{t「x){try{byte['b=newbyte[10?

4];intl^ns=dis*rpa(1(b);

String-FileNaniQ=nei^Stringtb,®.,lens);

System♦printlnf^filoNamet"+filcNamc)\

fis=rewFileInpirtStreain(".\\source\\"+fileName);byte[]buffer-newbyte[1024*6W]5intlen;

Systen.out.println(HK^S:

送內弯”);

while((len=fis.read(buffer))!

=-1){dos.writpfbuffprjQ,lpn);

}

dos.write(NEND";

System.cwt.printin("交件发送圭毕!

");

}catch(IOExccptionc)[

System.oLft*println(°ER^^:

读入失败"”

e.print5t日匚1<1厂日匸亡(};

}

try{

fis.closp();

}catch(JOException&){

//TODO目动生成的匚日tch规

e.printStackTrace();

}

}

}

publicstaticvoidmain(String[]a^^s){

newServer().intera匚t(〉;

}

Client.java

packageworki;

importjava*10h□□talnputstreofi;_|

publicclassClient{

Socket-null;

Scannerin-newScannsr(System»in;

I.

FileOutputStreamfos=null;

StringfilcNomc;

DdtaOulputSliediiidos=null;

DatalnputStrea『dis-null;

publicClient(){

ss=newSockQt()

InetSocketAddressisa=newInetSccketAddress("127.0.0.1"5036);

try(

ss,connect(isa);

dos=newDataOirtputStream(ss

dis=newDatalnputStre^mfss.getlnputSt「伽皿⑴;}catch(TOExceptione){

Systen.di/t.printin["g户端旌搂失哄J;

}

}

publicvoidinteract()throusiOtxception{while(truc){

SystefnTout,println("盾帝入一牛文牛若:

");fileN^me=in.nextLinw();

by[JbFileName.getBytes()j

dos*write[b);

intLength=Q;

byte[]bbnewbyte[1924*&00];

fos-newKileOirtputStr'ean(b\\\destiriation\\"+fileN^me);try{

t#)ileC(length-dis.read(bb))I二-1){

"3ystem

if(newStringtbbjlength-3,3)*equals("END")){

break;

}

fo$Twrite(bb,0jlength);

}

System+out*printIn("文件搖檢完卑I

}catch(lOExceptione){

System.out.printin(■嘗门命蜀瓷腓矣器主曲:

証据乂殴*

}

fos.closed)I

publicstaticvoidrnain(String[]args)throws10匚xception{Clientt■newClientf);

t.int&ract()

说明:

本次实验遇到的最大的困难就是本题,通过询问老师得到解决

问题描述:

客户端向服务器发送一个文件名,服务器端通过文件流将文件读入内存,然后再用网络流输出到客户端,客户端接受到文件流然后用文件流保存到本地。

在客户端接受网络流的时候会发现客户端程序进入死循环,无法进

行下一个文件的读写。

问题出现原因:

由于客户端通过网络流进行读写的时候与文件读写是不一样的,不会出现读到文件尾部的情况,而是会一直等待从而造成死循环。

问题解决方法:

设置一个文件末尾标记进行读写,如果读取到该标记则说明结束,break断开死循环。

任务三:

现有一个Triangle(三角形)类

publicclassTriangleimplementsSerializable{

doublesideA;

doublesideB;

doublesideC;

Strin菖area;

publicTria电doubledoublec){

this.sideA=a;

this.sideB=b;

this,sideC=c;

}

publicbooleanisLegal(){〃判断三角形三条边是否合法I」

publicStringcalculateArea(){//「算三毎旳囱积

doublep=(sideA+sideB+sideC)/2,0;

area=1,41+Math*(p-sideA)*(p-sideB)*(P-SideC});

returnarea;

}

}

思考:

为什么Triangle需要实现Serializable接口?

服务器用于接收客户端传来的Triangle对象,计算三角形面积,将计算结果

传给客户端。

连接服务器之前:

点击“连接服务器”实现连接,点击“send”提交计算请求:

基本要求:

使用ServerSocket类和Socket类实现单线程对象的发送与接收实现计算结果的发送与接收。

服务器端可以不使用界面。

效果截图:

代码截图:

Triangle.java

 

importjava・io・Serializable;

/*

•疼歹妣最为了便于在网貉的传输和保存

publicrriangleimplements5亡rializ:

diblE{

doublesideA;

doublesideB;

doublesideC;

doublearea;

publicTriangle(){

sideA=sideB=sideC=0

public7riarig]_e({10Libledoublet>,doublec){

七his.sideA-a;

this・sideB=b;

thiSnside匚=匚;

publicboaleani^Legal(){

sideC))

sideB))

sideft))

if((sideB+sideA>5ideC>&St(sideB-sideA

if((sideC4sid^A>side匚-sideA<

returntrue;

if((sideB+sideC>sideA)&&(sideG-sideC

returnfalse;

}

publicdoublecalculat&Areaf){

doublep=(sideA4-sideB-i-sideC)/2.

area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sireturnareaj

 

TriangleFrame.java

packagework3;

importjava.awt.BordorLayout;;!

publicclassTrlangleFraaeextends3Frame{TCPClienttc・null;

JParelnorth;

3Parelcenter;

*

JParelsouth;

^Buttonlink;

^Buttonsend;

JTextFieldtextA;

JTextFieldtextB;

JTextFieldtextc;

area;

publicTrlanglercd«e(){

tc-newTCPC1lent();

link・newS");

seedinewJButtonCstHD*);

textA=newjTextField();

textB■new3TextField();

textC・newDTextfield();

■newJTextArea();

north=new3Panel();

center=newJPanel();

south=new0Panel();

tmtto;

north・S€tLNyout(riewBorderLayout());

north・add(link»EorderLayout.CFWTFR);

cente「・setLayout(newFlowL«yojt());

4

center.add(nR43Latel(9VSldeA:

*));

"ntee・2dd(2xtA〉:

center・2dd(npw3Label(*SldeB:

*));center.add(textB);

center.add(new3Label(wSideCM));center・add(textC);

center.add

south・5etL8yout(newBorderLayout());

south・add(ar*ea);

area.setBorderfnewBevelBcrder(BevelBorder・LOW£R£D));

this•setTitle(-计算三角形面积••“

this.setVisible(truc);

this・setsi2°(newDimension(680/08));

this・SQTDefdultC10SQ0pGraxlcxi(JFrame・EXITONCLOSE);

this.^dd(north,Bor(terLayout.NORTH);

this.add(c^nter#Bord^rLayout.CFNTER);thls.add(south,BorderLayout.50UTH);

voidINIT(){

area.setRows(16);

textA・setPreferredSize(newMinersion(1G0,30));textB.setPreferredSizefnewDinersion(100,30));

textC・setPreferredSizefnewDinersion(1G0f30));

•link・addActionlistener(newActionListGnen(){^Override

publicvoidactlonPerformed(ActionEventg){

if(tc.llnk()){area.setText(M服务署连接咸功!

JPt也址为:

"卜tc.ss.grtlnetAddressO♦*\n");arpa.append('^口世w“tc.ss.gptLocalPort()♦w\n");

}01"{area.setTextO.务君连赛矢败!

\十);

}};send»addActionList@ner(newActionListener(){

(^Override

publicvoidactionPerformed(ActionEvente){Stringa=nulljb=null^c=nullja-textA^gefext()jb=texts,get_ext();c-textC.get_ext(};

DoubleSarea=tc

area.appended的三个边长不能组咸三角形!

”);else

area.append("H角形的面积为:

"*Sarea+n\n");}

}};

}

publicstaticvoid!

main(String[]args){

newTriangleFramef);

}

TCPServcer.java

packagewonk3j

importjava,io*DataInputStream;|2

publicclassTCPServer{

ServerSocketss=null;

Socketsocket=null;

DataInputStreamdis=null;

DataOutputStreamdos=null;

publicTCPServer(){

try{

ss=newServerSocket(6660);socket=ss.accept();

dis=newDatalnpuizEtrearn(socket.getInputs七「己日111());dos=newDataOutputStream(socke七*直色士011七口11七5七$£幺1!

1());

}eatch(IOExceptione){

System.out.printin(诜口祕占用")i

publicvoidirrteract(){|

Trianglet=null;

while(true){

try{

doublea=dis*readDouble();doubleb=dis.readDcuble();

doublec=di5

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2