《基于Socket的CS程序开发.docx》由会员分享,可在线阅读,更多相关《基于Socket的CS程序开发.docx(5页珍藏版)》请在优知文库上搜索。
1、诲陈工学旌计算机工在考底实验报告书课程名:计算机网络题目:基于Socket的C7S程序开发班级:学号:姓名:.实数据传为开发输的一序二实成绩:指导教师:批阅时间:2023年10月30日日,允卜算出它们的和、差、积、商,最后送回客户端。三.实验步骤与源程序源程序:1、效劳器端:.*;importjava.io.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassClientextendsFrameimplementsRunnable,ActionListenerDataInputStrearnin=nu
2、ll;DataOutputStreaniout=null;Panelp;1.abelIabl1lab2,lab3;TextFieldtfl,tf2,tf3;Buttonconnection,send;Socketsocket=null;Threadthread;TextAreatext;publicClient()SUPer(客户端:);SetLayout(newFlowLayoutO);setSize(300,250);设置窗口大小SetLocation(200,200);/设置窗口显示位置SetResizableCfalse);p=newPanel();p. SetLayout(null)
3、;p.SetBounds(0,O,300,250);addWindowListener(newWindowAdapter()publicvoidwindowClosing(WindowEvente)System,exit(0););text=newTextAreaO;labl=newLabe1(输入IP地址:);IabLSetBounds(5,5,60,25);lab2=newLabeI(第个数字:);lab2.setBounds(5,35,60,25);lab3=newLabe1(第二个数字:);lab3.SetBounds(5,65,60,25);tfl=newTextField(IO);
4、tfl.setBounds(80,5,100,25);tf2=newTextField(IO);tf2.setBounds(80,35,100,25);tf3=newTextField(IO);tf3.setBounds(80,65,100,25);connection=newBUttOn(连接效劳器);connection.setBounds(200,5,90,25);connection.addActionListener(this);send=newBUttOn(发送数据);send.setBounds(200,65,90,25);send.addActionListener(this)
5、;text=newTextArea(200,50);text.setBounds(5,100,290,HO);q. add(labl);p.add(Iab2);p.add(Iab3);r. add(tf1);p.add(tf2);p.add(tf3);s. add(connection);p.add(send);t. add(text);add(p);SetVisible(true);socket=newSocket();thread=newThread(this);publicvoidactionPerformed(ActionEvente)if(e.getSource()=connecti
6、on)InetAddressaddress=null;InetSocketAdclresssocketAddress=null;try请求和效劳器建立套接字连接:if(socket.IsConnected()elseaddress=InetAddress,getByName(tf1.getText();socketddress=newInetSocketAddress(address,8755);socket,connect(socketAddress,2000);/*等待2秒中in=newDataInputStreani(socket,getInputStream();out=newData
7、OutputStreani(socket.getOutputStream();send.SetEnabled(true);JOptionPane.ShoWMeSSageDialog(this,连接成功!,成功!,JOptionPane.INFORMATION-MESSAGE);thread,start();catch(IOExceptionex)System,out.printIn(*timeout*+ex);System,out.printIn(socketAddress.getHostName()+:*+socketAddress.getPort();JOptionPane.ShowMes
8、sageDialogCthis,z*连接超时!,错误!,JOptionPane.ERRORJfESSAGE);newClient();dispose();if(e.getSource()=send)Strings=tf2.getText()+,+tf3.getTextO;if(s!=ull)tryout.WriteUTF(s);catch(IOExceptionel)publicvoidrunOStrings=null;while(true)trys=in.readUTF();text,append(s+n);catch(IOExceptione)text,append(与效劳器己断开);br
9、eak;publicstaticvoidmain(Stringargs)newClient();)2、客户端importjava.io.*;.*;importjava.util.*;publicclassServerpublicServer()ServerSocketserver=null;Serverthreadthread;Socketyou=null;while(true)tryserver=newServerSocket(8755);catch(IOExceptionel)System,out.Println(正在监听);/ServerSocket对象不能重复创立trySystem,o
10、ut.PrintIn(等待客户呼叫);you=server.accept();System.OUt.printIn(已连接到客户);System,out.PrintIn(客户的地址:+you.getInetAddressO);catch(IOExceptione)SySteni.out.println(正在等待客户);if(you!=null)newServerthread(you),start();/为每个客户启动一个专门的线程publicstaticvoidmain(Stringargs)newServer();classServer_threadextendsThreadSocketso
11、cket;DataOutputStreamout=null;DataInputStreamin=null;Strings=nu11;booleanquesion=false;Serverthread(Sockett)socket=t;tryout=newDataOutPUtStrecLm(socket,getOutputStream();in=newDataInputStream(socket,getInputStreamO);catch(IOExceptione)publicvoidrun()while(true)doublea=newdouble2;inti=0;trys=inreadUT
12、FO;/堵塞状态,除非读取到信息quesion=false;StringTokenizerfenxi=newStringTokenizer(s,);while(fenxi.hasMoreTokens()&quesion=false)Stringtemp=fenxi.nextToken();tryai=Double.valuef(temp).doubleValue();i+;catch(NumberFormatExceptione)out.WriteUTF(请输入数字字符);quesion=true;if(quesion=false)doubles=a0+al;doublep=a0-al;dou
13、bleq=a0*al;doubler=a0al;out.writeUTF(*+a0+*+al+*=*+s);out.writeUTF(*+a0+*-*+al*=*+p);out.writeUTF(*+a0+*+al+=+q);out.writeUTF(*+a0+al+=+r);System.OUt.println(客服端数据:+a0+和+al);System,out.PrintIn(完成客户端运算);catch(IOExceptione)System,out.Println(客户离开);return;四.测试数据与实验结果客户端程序运行结果链接效劳器客户端进行四种运算效劳器端的运行结果:1.J
14、aVa语言中,效劳器端和客户端套接字对象类相同吗?如不同,有何差异?答:不相同,客户端使用Socket,效劳器端使用ServerSocketo2 .程序编写完毕并编译后,先运行客户端程序,还是先运行效劳器端程序?为什么?答:先运行效劳器端,如果效劳器端不运行或后运行,客户端运行后无法与效劳器端建立连接,就不能用到效劳器端的效劳。3 .Java语言中如何使用UDP协议进行数据传输的?答:JaVa里UDP协议传送的方式细节已经封装了到类DatagramSOCket里,只要用DatagramSocket的对象进行传输数据就可以了,底层实现是应该依靠本地C语言程序来完成的实验体会通过这次试验让我更加深刻的体会和理解了从效劳端和客户端的联系和工作方式,稳固了传输层与套接字的根本知识,能够利用套接字实现面向连接的数据传输,学会简单的客户/效劳器程序的开发,希望在以后的学习中更多的去学习和实践关于客户端和效劳器东西。