基于TCP and UDP的socket编程
更新时间:2023-10-13 09:18:01 阅读量: 综合文库 文档下载
天津理工大学实验报告
学院(系)名称:计算机与通信工程学院 姓名 班级 刘强 教学2班 学号 实验项目 计算机网络 2015年4月30日 第7、8节 20126*** 专业 计算机科学与技术(中加) 基于TCP and UDP的socket编程 课程代码 实验地点 成绩 0662016 7-215 课程名称 实验时间 批改意见 教师签字: (一) 实验目的: 熟悉和掌握socket编程的基本理论和方法。掌握基于TCP和UDP的工作原理以及Socket编程的一般方法,能够编写简单的网络应用程序。 (二)实验环境: 软件环境:Windows 2000/XP / Eclipse 硬件环境:IBM-PC或兼容机 局域网、PC机连入Internet (三)实验学时: 2学时,必做. (四)实验内容: 利用Java或C++语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。 (五)实验要求: 每位同学上机编程实验,实验指导教师现场指导。程序可参考附录的程序1、程序2、程序3和程序4(程序中有错误需完善)。在实验报告中要说明Socket编程的客户端和服务器端主要步骤、利用Java语言用到的主要类及其主要作用、TCP和UDP编程的主要差异和特点、你所实现的文件传输的程第1页 共6页
序代码、实验过程和实验结果。 (六)实验步骤: 程序代码: TCP Client: package tcpClient; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.Socket; public class tcpClient { 中 clientSocket.getOutputStream()); private static Socket clientSocket; public static void main(String args[]) throws Exception { String sentence; // 声明字符串变量用于存储字符串输入和传送 String modifiedSentence;// 从服务器得到,并送到用户标准输出 System.out.println(\请输入要转换的字符串:\clientSocket = new Socket(\为定义的套接字 BufferedReader inFromUser = new BufferedReader( // 创建inFromUser程序的输入流 new InputStreamReader(System.in)); // 将流连接到标准输入 DataOutputStream outToServer = new DataOutputStream( // DataOutputStream包含在java.io.*包BufferedReader inFromServer = // inFromServer 连接套接字的输入流 new BufferedReader(new InputStreamReader( // BufferedReader包含在java.io.*包中 clientSocket.getInputStream())); sentence = inFromUser.readLine(); // 将用户输入的一行 读入到sentence中 outToServer.writeBytes(sentence + '\\n'); // outToServer程序的输出流 modifiedSentence = inFromServer.readLine();// 当到达服务器时,他们进入modifiedSentence字符串中 System.out.println(\将服务器返回来的 // modifiedSentence打印到监第2页 共6页
视器上 } TCP Server: package tcpServer; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; class server { } 第3页 共6页
} clientSocket.close(); // 关闭套接字,tcp连接也随之关闭 private static ServerSocket welcomeSocket; public static void main(String argv[]) throws Exception { } String clientSentence; // 声明字符串变量用于存储字符串输入和传送 String capitalizedSentence; // 从从客户端得到 welcomeSocket = new ServerSocket(8579);// 创建welcomeSocket对象,在8579端口进行监听 while (true) { } Socket connectionSocket = welcomeSocket.accept();// 获取从客户端传来的字符 BufferedReader infromClient = new BufferedReader( new InputStreamReader( // BufferedReader包含在java.io.*包中 connectionSocket.getInputStream())); DataOutputStream outToClient = // outToClient程 序的输出流 new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = infromClient.readLine(); // 把用户输入的送入clientSentence中 capitalizedSentence = clientSentence.toUpperCase() + '\\n';// 将发送行中的小写转换成大写 outToClient.writeBytes(capitalizedSentence); 执行结果: UDP Client: package udpClient; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class udpClient { public static void main(String args[]) throws Exception { System.out.println(\请输入要转换的字符串:\BufferedReader inFromUser = new BufferedReader(new InputStreamReader( System.in)); // 创建输入流,用于输入字符串 DatagramSocket clientSocket = new DatagramSocket(); // 创建一个DatagramSocket 对象 InetAddress IPAddress = InetAddress.getByName(\创建一个InetAddress byte[] sendData = new byte[1024]; // 创建字节数组 byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); // 读取输入的字符 sendData = sentence.getBytes(); // 将字符串转化为字节数组 DatagramPacket sendPacket = new DatagramPacket(sendData, // 创建DatagramPacket 对象, // 指定其发送地址和端口号 sendData.length, IPAddress, 8876); clientSocket.send(sendPacket); // 调用 socket 对象的 send()方法发送数据 DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); // 创建 DatagramPacket 对象, 用于接收数据 第4页 共6页
} } clientSocket.receive(receivePacket); // / 调用 socket 对象的 receive()方法接收数据 String modifiedSentence = new String(receivePacket.getData()); System.out.println(\clientSocket.close(); // 关闭客户端socket连接 UDP Server: package udpServer; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class udpServer { public static void main(String args[]) throws Exception { @SuppressWarnings(\DatagramSocket serverSocket = new DatagramSocket(8876);// 创建一个DatagramSocket // 对象,指定端口为8876 byte[] receiveData = new byte[1024]; // 创建字节数组 byte[] sendData = new byte[1024]; while (true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); // 创建一个空DatagramPacket对象 serverSocket.receive(receivePacket); // 使用 receiver 方法接手客户端所发送到数据, // 如果客户端没有发送数据, 进程阻塞 String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); // 获取Client端IP地址 int port = receivePacket.getPort(); // 获取Client端端口号 String capitalizedSentence = sentence.toUpperCase(); // 将字符串转化成大写字母 sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData,// 创建DatagramPacket // 对象, 第5页 共6页
} } } // 指定其发送地址和端口号 sendData.length, IPAddress, port); serverSocket.send(sendPacket); // 调用 socket 对象的 send()方法发送数据 执行结果: 实验体会: (1) Datagram Sockets:数据包socket,一般传输方式为UDP (2) Stream Sockets:流socket,一般传输方式为TCP Java通过两个类DatagramSocket和DatagramPacket来支持但Datagram socket(UDP)。Datagram Socket不真正区分Server和Client,既可以用来写server,也可以写client。但对于java中的Socket类和ServerSocket类就只能分别来写客户端和服务器端(同时支持TCP与UDP,更Socket(String host,int port,boolean stream)构造方法中的stream即可)。 第6页 共6页
} } } // 指定其发送地址和端口号 sendData.length, IPAddress, port); serverSocket.send(sendPacket); // 调用 socket 对象的 send()方法发送数据 执行结果: 实验体会: (1) Datagram Sockets:数据包socket,一般传输方式为UDP (2) Stream Sockets:流socket,一般传输方式为TCP Java通过两个类DatagramSocket和DatagramPacket来支持但Datagram socket(UDP)。Datagram Socket不真正区分Server和Client,既可以用来写server,也可以写client。但对于java中的Socket类和ServerSocket类就只能分别来写客户端和服务器端(同时支持TCP与UDP,更Socket(String host,int port,boolean stream)构造方法中的stream即可)。 第6页 共6页
正在阅读:
有趣的“动物园”作文1000字07-09
0IG - 感悟人生哲学BB09-22
2009年厦门大学846电子线路考研专业课真题及答案 - 图文10-02
高中地理100易考、易错点03-10
司法文书 案例 立案破案报告书04-20
APG40的操作手册01-15
1993年国务院印发的《国务院关于国家行政机关和企业事业单位印章的规定》(国发〔1993〕21号)10-10
我的手表作文250字07-10
- 天大砼方案 - 图文
- 农业科技网络书屋能力提升_玉米错题选
- DNS习题
- 浅议检察官对罪犯谈话的技巧与效果
- 高考语文文言文翻译专题训练
- AB类学科竞赛目录(2015)
- 建筑面积计算新规定(2015最新)
- Revit2012初级工程师题集一
- 十三五项目米线可行性报告
- 2013体育学院党组织建设工作总结
- 2014Revit工程师题库
- 高中数学如何实施研究性学习
- 茶艺表演 中英互译
- 小学音乐湘文艺版 四年级下册 第十一课《(歌表演)脚印》优质课公
- 山西省农村合作经济承包合同管理条例
- 2015年镇江市中考化学一模试题参考答案及评分标准(定稿)
- 统计 题集
- 批评意见清单
- 8潞安集团蒲县黑龙关煤矿矿业公司2
- 鄂教版四年级语文上册复习精要(光谷四小)
- 基于
- 编程
- socket
- TCP
- UDP
- 课程研发的策略
- 产品质量档案管理制度
- 预应力工程监理细则
- 2015年动物防疫法规知识竞赛试题(附答案)
- 苏教版八年级上册语文第一单元复习资料
- 四川大学《操作系统2265》15春在线作业2满分答案
- 基于建构主义理论的英语个性化与自主化学习
- 生物统计学课后重点题答案
- 信息分析与决策
- 60t比20行车试重方案
- 赏析一句话的5种答题方法 -
- 精选小学生国旗下讲话稿:安全常系心中
- 许国璋英语第二册第十课课文、对话、练习、答案
- 函授毕业论文统一规范
- 新手会计手工账做账详细流程
- 苏申内港线(江苏段)航道整治工程环境影响报告书
- 基于PLC的城市污水处理控制系统设计(开环) - 图文
- 模板计算书002
- 《我的野生动物朋友》阅读测试题
- 2011新规范、标准目录