套接字实验报告

  • 格式:doc
  • 大小:54.53 KB
  • 文档页数:12

甘肃政法学院本科生实验报告()姓名:学院:计算机科学院实验课程名称:tcp/ip协议与实现实验日期: 年月日指导教师及职称: 实验成绩:开课时间:学年学期甘肃政法学院实验管理中心印制篇二:套接字编程实验报告programing 实验物联2班 201208080228 赵智慧一、实验题目:利用套接字编程,编写出tcp和udp的客户机、服务器程序进行交互二、实验代码:1. tcp服务器:package tcp; import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import .serversocket; import .socket; public class tcpserver { public static void main(string[] args) throws ioexception{ serversocket server=new serversocket(7999); system.out.println(server ok); socket socket=server.accept(); bufferedreader bf=new bufferedreader(new inputstreamreader(socket.getinputstream())); string str=bf.readline();while(str!=null){system.out.println(str);str=bf.readline();}}}2. tcp客户机:package tcp; import java.io.bufferedreader; import java.io.dataoutputstream; import java.io.ioexception; import java.io.inputstreamreader; import java.io.outputstream; import java.io.printwriter;import .socket;import .unknownhostexception; public class tcpclient { public static void main(string[] args) throws unknownhostexception,ioexception{string sentence; inputstreamreader isr = new inputstreamreader(system.in); bufferedreader infromuser = new bufferedreader(isr); socket clientsocket = new socket(127.0.0.1,7999); sentence = infromuser.readline(); outputstream os = clientsocket.getoutputstream(); printwriter oos=new printwriter(os); os.write(sentence.getbytes()); clientsocket.close();}}3. udp服务器:package udp; import .datagrampacket; import .datagramsocket; import .inetaddress; import .socketexception; public class udpserver { public static void main(string[] args) throws exception{ datagramsocket serversocket = new datagramsocket(9876); //所有发送和接收的数据都将通过该套接字//因为udp无连接,所以无需创建一个新的套接字监听新的请求byte[] receive1 = new byte[1024]; byte[] receive2 = new byte[1024]; byte[] send1 = new byte[1024]; byte[] send2 = new byte[1024]; byte[] send3 = new byte[1024]; while(true){datagrampacket receivepacket = new datagrampacket(receive1, receive1.length); serversocket.receive(receivepacket); string str = new string(receivepacket.getdata()); //从分组中提取出数据,并存入str中inetaddress ip = receivepacket.getaddress(); //提取ip地址int port = receivepacket.getport(); //提取客户机端口号string ask = 请选择:1.将其转化为大写 2.将a字符替换为c字符; send1 = ask.getbytes();datagrampacket sendpacket1 = new datagrampacket(send1, send1.length, ip,port); serversocket.send(sendpacket1); datagrampacket receivepacket2 = new datagrampacket(receive2, receive2.length);serversocket.receive(receivepacket2); string str2 = new string(receivepacket2.getdata()); if(str2.tochararray()[0]==1){ string capitalizedsentence = str.touppercase(); send3 = capitalizedsentence.getbytes(); datagrampacket sendpacket3 = new datagrampacket(send3, send3.length, ip,port); serversocket.send(sendpacket3); }else{ string change = str.replace(a, c); send2 = change.getbytes(); datagrampacket sendpacket2 = new datagrampacket(send2, send2.length, ip,port); serversocket.send(sendpacket2); }}}}4. udp客户机:package udp; import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import .datagrampacket; import .datagramsocket; import .inetaddress; import .socketexception; import .unknownhostexception; public class udpclient {public static void main(string[] args) throws ioexception{ inputstreamreader isr = new inputstreamreader(system.in); bufferedreader infromuser = new bufferedreader(isr); datagramsocket clientsocket = new datagramsocket(); //客户机套接字inetaddress ipaddress = inetaddress.getbyname(127.0.0.1); byte[] senddata1 = new byte[1024]; byte[] senddata2 = new byte[1024]; byte[] receivedata1 = new byte[1024]; byte[] receivedata2 = new byte[1024]; string sentence = infromuser.readline(); senddata1 = sentence.getbytes(); datagrampacket sendpacket = new datagrampacket(senddata1,senddata1.length,ipaddress,9876); clientsocket.send(sendpacket); datagrampacket receivepacket1 = new datagrampacket(receivedata1,receivedata1.length);clientsocket.receive(receivepacket1); string modifieddata1 = new string(receivepacket1.getdata()); system.out.println(server:+modifieddata1); string sentence2 = infromuser.readline(); senddata2 = sentence2.getbytes(); datagrampacket sendpacket2 = new datagrampacket(senddata2,senddata2.length,ipaddress,9876); clientsocket.send(sendpacket2); datagrampacket receivepacket2 = new datagrampacket(receivedata2,receivedata2.length);clientsocket.receive(receivepacket2); string modifieddata2 = new string(receivepacket2.getdata()); system.out.println(server:+modifieddata2); clientsocket.close(); }}三、实验分析: tcp提供可靠的数据传输,而udp提供不可靠的运输服务,在套接字编程方面,udp客户机使用的是datagramsocket,而tcp客户机使用的是socket。