
网络与通信试验报告2Socket通信编程.doc
9页《网络与通信》课程实验报告实验2: Socket通信编程姓名 院系计算机学院 学号任课教师指导教师实验地点计算机大楼706、708实验时间实验课表现出勤、表现得分(10)实验报告得分(40)实验总分操作结果得分(50)实验目的:1. 掌握Socket编程过程;2. 编写简单的网络应用程序实验内容:利用你选择的任何一个编程语言,分别基于TCP和UDP编写一个简单的Client/server 网络应用程序具体程序要求参见《实验指导书》要求以附件形式给出:• 系统概述:运行环境、编译、使用方法、实现环境、程序文件列表等;• 主要数据结构;• 主要算法描述;• 用户使用手册;•程序源代码;实验要求:(学生对预习要求的回答)(10分)得分:• Socket编程客户端的主要步骤• Socket编程服务器端的主要步骤实验过程中遇到的问题如何解决的?(10分)得分:问题1:在编写Socket程序时如何使客户端与服务端建立连接?在Socket的服务器端1】,建立一个死循环,不断的监听客户端所发送的comiectO请求,当 有相应的请求到来时,建立连接,退出死循坏问题2:连接简历后如何传送字符传?通过Socket自带的sendQ和receive()函数,实现客户端与服务器的信息交流发送。
在设置相 应的一对发送函数时,要注意相对应的函数循序,否则可能导致死锁问题3:在已成功发送数据之后,出现receiveQ函数返回值为0在完成发送之后,如果调用close函数,则相关的发送字节数将被清零本次实验的体会(结论)(10分)得分:通过这次Socket编程,虽然对我来说刚开始有点难度,但是经过我的一番努力,查找相关 资料和询问同学,最后我也终于成功了在这个过程中,我对JAVA有了一定的了解,我的 编程技术也有了一定的提高思考题:(10分)思考题1: (4分) 得分:你所用的编程语言在Socket通信中用到的主要类及其主要作用在这次的编写Socket程序中,主要用到了 java语言,实现了对Socket的定义到连接再到通 信的全过程思考题2: (6分) 得分:说明TCP和UDP编程的主要差异和特点TCP是有连接传送方式,在进行通信之前,需要先建立连接,相关信息交流函数为sendQ 和i-eceiveQ,其中不用给出相应的发送或接收地址UDP是无连接传送方式,在通信之前无需建立连接,相关的交流函数为sendto()和 receivefiomO,其中需要给出相应的发送或接收地址°指导教师评语:口期:程序源代码:TCP: package tcp;.*;unport java.io.*;unport java.util.*;public class Client {public static void main(Strmg[] aigs) tluows IOException { Socket s = new Socket(Hlocalliost,\ 30000);Suing flag = m,;Seamier scan = new Scaimer(s.getIiiputStream());if (scaii.hasNextLmeQ) {flag = scan.nextLmeQ.triin();}if (HokH.equals(flag)) {File file = new File(Md:\\a.txtH);if (?file.exists() || !file.isFileQ) {Svstem.out.pnntln(nFile \IIM + args[2]+ H\n does not exist or is not a normal fil亡・”); Svstem.exit(O);}DataOutputStream out = new DataOutputStream(s.getOutputStieam()); out.wnteUTF(MaaaaaaaaaaaaaaH);out.writeLong(file.lengtli());FilelnputStieam ill = null;try{in = new FileliiputStreain(file);byte[] buffer = new byte[1024 * 8];iiit len = -1;Svstem.out.println(nFile tansfer start…J;while ((len = m.read(buffer)) != -1) {out.write(buffer, 0, len);}Svstem.out.println(nFile tansfer complete...n);} catch (Exception e) {System.out.println(nEiTOf: " + e.getMessageQ); Svstem.exit(l);} filially {try{if (in != null)m.closeO;} catch (Exception e) {}}out.writeUTF(nbbbbbbbbbbH);if (out != null)out.close();}if (scan != null)scan.close();if (s != null)s.closeQ;}}package tcp;miport j ava. lo.DatalnputStieam; unport java.io.File;unport java.io.FileOutputStieam;unport j a va. 10. IOExc ep tion;miport j a va. 10. Input Stieam;miport j a va. io .PiintStream;unport .ServrerSocket;miport .Socket;public class Serv-er extends Tliiead {public static void mam(Strmg[] aigs) throws IOException { boolean isStop = false;ServrerSocket ss = null;try {ss = new SeiverSocket(30000);wliile (!isStop) {Socket socket = ss.acceptQ;PrmtStieam psi = new PrmtStream(socket.getOutputStieam()); psl.println(MokH);psl.flush();Inputstream in = socket.getInputStieam();DatalnputStreain dis = new DataliiputStieam(m);String head = dis.readUTFQ;Long length = dis.readLongQ;Svstem.out.println(head);Svstem.out.println(length);File file = new File(He:\\a.txtH);if (Ifile.existsQ) {file.createNewFile();FileOutputStream out = new FileOutputStream(file); byte[] buffer = new byte[1024 * 8];iiit len = -1;Long n = 01;wliile ((len = dis.read(buffer)) != -1) { out.write(buffer, 0, len);n += len;if((n+ 1024* 8) > length){int lastLen = (int) (length - n);len = dis.read(buffer, 0, lastLen); out.write(buffer, 0, len);break;}}} catch (Exception e) {System.ou 匚 pnndnCEno 匚” + e.getMessageQ);}Suing aiiotherhead = dis.readUTF();System.out.println(aiiotheihead);try{if (in != null)iii.closeQ;} catch (Exception e) {}socket.closeQ;}} catch (Exception e) {}}}UDP:package udp;miport java.io.*;miport java.awt.*;import java.awt.event.*;.*;public class chata extends Frame implements ActionListener{Label label = new Lab亡 1(” 发言”);Panel panel = new PanelQ;TextField tf = new TextField(lO);TextAiea ta = new TextAieaQ;public chataQ{superf'A 方”);setSize(250,250);paiiel.add(label);paiiel.add(tf);tf.addActioiiListener(this);add(,rNoith,\paiiel);add(nCentef\ta);addWmdowListener(new WindowAdapter(){ public void wiiidowClosiiig(WmdowEvent e){System.exit(O);}}); show();//startup listenerListener listener = new Listener();Tluead tliiead = new Tluead(listener);thread, start。
public void actioiiPeiibrmed(ActioiiEvent e){〃把要说的话发出去String sti = tf.getText();byte[] buf = sti\getBytes();tf.setText(null);ta.append(H 我说:n+str);ta.append(n\iiH);try{DatagiamSocket socket = new DatagramSocket();DatagianiPacket packet = new DatagraniPacket(bu£buf.length); IiietAddiess remote.addr = IiietAddress.getByName(HlocalliostH); packet.setAddress(remote_addr);//send 。












