




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 IOExceptionServerSocket 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, IOExceptionString sentence;InputStreamReader isr = new InputStreamReader(System.in);BufferedReader inFromUser = new BufferedReader(isr);Socket clientSocket = new Socket(,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 ExceptionDatagramSocket serverSocket = new DatagramSocket(9876); /所有发送和接收的数据都将通过该套接字 /因为UDP无连接,所以无需创建一个新的套接字监听新的请求byte receive1 = new byte1024;byte receive2 = new byte1024;byte send1 = new byte1024;byte send2 = new byte1024;byte send3 = new byte1024;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. 客户机: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 IOExceptionInputStreamReader isr = new InputStreamReader(System.in);BufferedReader inFromUser = new BufferedReader(isr);DatagramSocket clientSocket = new DatagramSocket(); /客户机套接字InetAddress IPAddress = InetAddress.getByName(); byte sendData1 = new byte1024;byte sendData2 = new byte1024;byte receiveData1 = new byte1024;byte receiveData2 = new byte1024;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。TCP实现:(1) 客户机从键盘输入读取一行字符,并通过套接字将该行发送到服务器(2) 服务器从其套接字读取一行数据(3) 服务器将来自客户机的数据打印出来UDP实现:(1) 客户机从其键盘输入读取一行字符,并通过套接字将该行发送到服务器(2) 服务器从其套接字读取一行数据(3) 服务器发送可供选择的操作信息发送给客户机(4) 客户机从其套接字读取来自服务器的信息,并将其选择通过套接字发送给服务器(5) 服务器通过套接字读取到客户机的选择,并根据是选择转换大小写还是选择替换字符来将修改后的行通过套接字发送给客户机(6) 客户机从其套接字中读取按照自己选择修改后的行,并打印显示出来四、 运行结果:TCP套接字:运行TCPServer 之后:再运行TCPClient:则TCPServer会显示:UDP套接字:五、问题思考:1. 在一台主机上安装编译用Java写的TCPClient和UDPClient程序,在另一台主机上安装编译TCPServer和UDPServer程序a. 如果你在运行TCPServer之前运行TCPClient,将发生什么现象,为什么?会报错,因为TCP是面向连接的传输,所以未开启服务器时先开启客户机不能通过三次握手建立连接,也就无法传输数据。b. 如果你在运行UDPServer之前运行UDPClient,将发生什么现象,为什么?没什么变化,因为UDP是无连接的,先开启服务器还是客户机都没有影响。c. 如果对客户端和服务器使用了不同的端口,将发生什么现象?不影响数据传输。2假定在UDPClient.java中,我们使用 DatagramSocket clientSocket = new DatagramSocket( 5432 ); 代替 DatagramSocket clientSocket = new DatagramSocket(); 在U
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 如何教育学生遵守纪律
- 2024年7月动物生理学复习题(含答案解析)
- 5月植物学模拟练习题(含答案解析)
- 纺织品色彩搭配与设计考核试卷
- 环保项目融资与风险管理考核试卷
- 海底油气管道设计优化与施工技术发展及其应用考核试卷
- 中小学建筑设计案例分析
- 茶叶栽培的资源循环利用与节能减排考核试卷
- 航空航天器热控制系统优化考核试卷
- 海洋生态保护与海洋环境保护与海洋科研环境保护与支持服务考核试卷
- 仓库定置目视化管理
- 2025-2030中国数据中心(IDC)行业市场发展分析及发展趋势与投资前景研究报告
- 2025年中国邮政集团工作人员招聘考试笔试试题(含答案)
- 【语文】第23课《“蛟龙”探海》课件 2024-2025学年统编版语文七年级下册
- 大部分分校:地域文化形考任务一-国开(CQ)-国开期末复习资料
- 糖尿病的并发症1
- 超星尔雅学习通《现场生命急救知识与技能》章节测试含答案
- KPMG_SOX_法案内部控制矩阵培训资料(powerpoint 39页)
- 小学心理活动课我是集体中的一员
- XX公司粗苯泄漏着火事故演练方案定
- 服装洗水唛洗涤标志
评论
0/150
提交评论