
正文
UDP套接字编程 返回系统时间
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
计算机网络实验简单UDP套接字编程
这是学校老师自己改进了一点的题目。我预习了好久才搞明白,同学来问的时候,一大堆简单问题实在是不想回答...所以,这时候我觉得博客是个好东西!
我的任务是做客户端和服务器,并通过修改服务器,实现在客户端输入GetTime,然后经过服务器返回当前系统时间
首先,Ubuntu系统
这个是不可少的,因为我们学的这个套接字就是在ubuntu上实现的,我是装的ubuntu16.04,没条件的装虚拟机也可以。
此次UDP套接字程序步骤- 创建套接字
- 命名套接字
- 在服务器上,等待消息
- 在客户端上,发送消息
- 将响应发送回客户端
- 关闭套接字
具体程序不给出,网上参考有很多,为了节省时间,老师给的代码,虽然有自己修改的,但是不敢发出来,毕竟老师还是很牛批的,万一找到我追究责任,那我不扯犊子了嘛。所以主要写写例如sendto,recvfrom之类的用法。
1.创建套接字
具体程序不给出,网上参考有很多,为了节省时间,老师给的代码,虽然有自己修改的,但是不敢发出来,毕竟老师还是很牛批的,万一找到我追究责任,那我不扯犊子了嘛。所以主要写写例如sendto,recvfrom之类的用法。
使用系统命令socket来创建套接字
int socket(int domain, int type, int protocol);
里面三个参数具体类型我还没搞懂,就不发了emmm
2.命名套接字
创建的套接字不能直接使用,要对其进行命名,使用系统的bind进行命名,给该套接字关联一个IP和端口号
int bind(int socket, const struct sockaddr *address, size_t address_len);
socket:服务器或者客户端自己创建的socket
address:服务器或者客户端自己的地址信息(协议族、IP、端口号)
address_len:服务器或者客户端自己的地址信息的长度
3. 在服务器上,等待消息
在服务器通过recvfrom接收来自客户端的消息,请记住我们接下来要修改服务器代码实现返回时间的就是在这一步后面修改代码。
服务器在循环里面不断调用recvfrom函数,接收客户的数据,并输出接收到的客户数据的长度和具体内容。
int recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *src_addr, socklen_t *src_len);
socket:标识一个已连接套接口的描述字。
buffer:接收数据缓冲区。
length:缓冲区长度。
flags:调用操作方式。
src_addr:(可选)指针,指向装有源地址的缓冲区。
src_len:(可选)指针,指向from缓冲区长度值。
以上是普通的套接字编程,在此次实验中还要求了修改服务器代码来实现返回客户端的是系统时间。所以这里我们主要注意一下buffer;
4.在客户端上,发送消息
UDP是无连接的,所以客户端可以直接向服务器发送消息,通过sendto向服务器发送
int sendto(int socket, const void *buffer, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len);
socket:一个标识套接口的描述字。
buffer:包含待发送数据的缓冲区。
length:buf缓冲区中数据的长度。
flags:调用方式标志位。
dest_addr:(可选)指针,指向目的套接口的地址。
dest_len:to所指地址的长度。
5.将响应发送回客户端
依旧通过sendto将响应发回客户端由客户端recvform后输出
6.关闭套接字
可以使用系统的close关闭套接字
close();
以上那些内容网上都可以搜到,也许比我还详细。所以我们这个主要要的在修改服务器代码,将给客户端发送的数据更改为系统时间
题目是在客户端输入GetTime然后显示系统时间。输入其他字符串,返回原字符串
还是之前让注意的recvfrom里面的buffer,这是我们要判断的,在服务器接收的内容存在buffer中,而recvform返回的值我们设为n,这是buffer的长度,也就是你输入的字符存在于buffer中.
我们可以建立一个time_p[]来存你要对比的字符串,也就是GetTime,但是要注意的是你在客户端输入的数据基本上是带有回车的,这样单纯的对比是会出错的,因为自己设置的对比用数组不含有回车.
所以我们要在预设的数组中添加回车。这个过程中要时刻注意自己的数组和读取的客户端发来的数组的结束标志和换行。
只需要在用strcmp判断出接收的数据和自己预存的数据是否一样,是则将缓存区数据更改为系统时间(这一步要记住通过strlen判断字符串长度并修改n,因为我们发送给客户端时要用缓冲区长度,如果不修改,会导致发送的数据缺失),否则直接返回。
补充时间函数
#include<stdio.h>#include<time.h>int main(){time_t timep;time (&timep);printf("%s",ctime(&timep));return 0;}
这是我自己修改服务器时更改的部分代码,有变动。而且,值得注意的是因为是在死循环里不断接收客户端发来的数据,我出现了数据有些重复了上次输入的。所以最好还是在死循环内用memset清空一下buffer。我清空后就避开了这个错误。
char time_p[] = "GetTime\n";time_t timep;time (&timep);if(strcmp(buffer,time_p) == 0){memset(buffer,0,sizeof(mesg));strcpy(buffer,ctime(&timep));k = strlen(buffer);buffer[k] = '\r';buffer[k+1] = '\0';n = k+1;}
说实话,这个预习还真是恶心。。。因为没接触过,“弄清”这些函数花了好久。还一大堆东西没弄明白。
仓促写个这玩意。难免有错误,发现请指出。。。
最后的最后,给个参考网址
参考链接
UDP套接字编程返回系统时间的更多相关文章- 计算机网络实验UDP套接字编程
这是个傻瓜式操作教程 西科大计算机网络实验 UDP套接字编程 我用自己的Ubuntu16.04来举例,实验室的是虚拟机,差不多 只针对第三个题目,修改服务器来通过响应客户端发送的GetTime并发送给 ...
- 探索UDP套接字编程
UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...
- 【转】 探索UDP套接字编程
UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...
- TCP和UDP套接字编程 (java实现)
在了解网络编程之前,我们先了解一下什么叫套接字 套接字即指同一台主机内应用层和运输层之间的接口 由于这个套接字是建立在网络上建立网络应用的可编程接口 因此也将套接字称为应用程序和网络之间的应用程序编程 ...
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...
- JavaTCP和UDP套接字编程
在我们刚开始入门Java后端的时候可能你会觉得有点复杂,包含了很多杂七杂八的知识,例如文件上传下载,监听器,JDBC,请求重定向,请求转发等等(当然也没有很多),但是我们自己真正的去开发一个小型网站( ...
- 【Unix网络编程】chapter8基本UDP套接字编程
chapter8基本UDP套接字编程 8.1 概述 典型的UDP客户端/服务端的函数调用 8.2 recvfrom和sendto函数 #include <sys/socket.h> ssi ...
- java基础----->;TCP和UDP套接字编程
这里简单的总结一下TCP和UDP编程的写法,另外涉及到HttpUrlConnection的用法 . TCP套接字 一.项目的流程如下说明: .客户输入一行字符,通过其套接字发送到服务器. .服务器从其 ...
- UNP学习笔记3——基本UDP套接字编程
1 概述 TCP和UDP网络编程存在一些本质的差异,主要是由于传输层的差别:UDP是无连接的不可靠的数据报协议,而TCP是面向连接的字节流协议. 下图是典型的UDP客户端和服务器之间的通信流程.客户不 ...
随机推荐- sql server 语句使用规范
Sql语句使用规范 规范内容以及注意事项: 1.查询时候使用top 10 /top 100 和where 字句控制每次执行SQL 返回的结果集合,在满足业务需求的同时返回最小的结果. 2.使用数据投影 ...
- opencv用imread( argv[1], 1)读取图片
显示一幅图:主要是运用功能:imread namedWindow imshowimread:从字面意思我们就可以看懂,用来读取图片的:namedWindow:显然,我们也可以看到这是用来命名窗口名称的 ...
- Joblogs&mdash;&mdash;ContentValues的使用
ContentValues在Android的SQLiteDatabase.update (String table, ContentValues values, String whereClause, ...
- IOS项目自动构建
# Sets the target folders and the final framework product. # 如果工程名称和Framework的Target名称不一样的话,要自定义FMKN ...
- npm install、npm install --save、npm install --save --dev、npm install -S、npm install -D的区别
npm install X: 会把X包安装到node_modules目录中 不会修改package.json 之后运行npm install命令时,不会自动安装X npm install X –sav ...
- css position相对定位与绝对定位彻底搞懂
定位position position本身就有给...定位的意思 position属性的值: static ---默认值 relative ---相对定位 absolute ---绝对定位 fixed ...
- 20165315 2017-2018-2《Java程序设计》课程总结
20165315 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安 ...
- 057 Hive项目案例过程
1.说明 这里只粘贴一张,图,主要针对的hive的项目的实践过程. 2.图 3.需求 统计PV 统计注册人数 => 这个是一个公司会关注的,每天的注册率. 统计ip 统计跳出率 => ip ...
- 20165236 实验四 Android程序设计
20165236 实验四 Android程序设计 一.实验报告 课程:Java程序设计 班级:1652班 姓名:郭金涛 学号:20165236 指导教师:娄嘉鹏 实验 ...
- WCF服务寄宿IIS与Windows服务 - C#/.NET
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...
这是个傻瓜式操作教程 西科大计算机网络实验 UDP套接字编程 我用自己的Ubuntu16.04来举例,实验室的是虚拟机,差不多 只针对第三个题目,修改服务器来通过响应客户端发送的GetTime并发送给 ...
UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...
UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...
在了解网络编程之前,我们先了解一下什么叫套接字 套接字即指同一台主机内应用层和运输层之间的接口 由于这个套接字是建立在网络上建立网络应用的可编程接口 因此也将套接字称为应用程序和网络之间的应用程序编程 ...
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...
在我们刚开始入门Java后端的时候可能你会觉得有点复杂,包含了很多杂七杂八的知识,例如文件上传下载,监听器,JDBC,请求重定向,请求转发等等(当然也没有很多),但是我们自己真正的去开发一个小型网站( ...
chapter8基本UDP套接字编程 8.1 概述 典型的UDP客户端/服务端的函数调用 8.2 recvfrom和sendto函数 #include <sys/socket.h> ssi ...
这里简单的总结一下TCP和UDP编程的写法,另外涉及到HttpUrlConnection的用法 . TCP套接字 一.项目的流程如下说明: .客户输入一行字符,通过其套接字发送到服务器. .服务器从其 ...
1 概述 TCP和UDP网络编程存在一些本质的差异,主要是由于传输层的差别:UDP是无连接的不可靠的数据报协议,而TCP是面向连接的字节流协议. 下图是典型的UDP客户端和服务器之间的通信流程.客户不 ...
- sql server 语句使用规范
Sql语句使用规范 规范内容以及注意事项: 1.查询时候使用top 10 /top 100 和where 字句控制每次执行SQL 返回的结果集合,在满足业务需求的同时返回最小的结果. 2.使用数据投影 ...
- opencv用imread( argv[1], 1)读取图片
显示一幅图:主要是运用功能:imread namedWindow imshowimread:从字面意思我们就可以看懂,用来读取图片的:namedWindow:显然,我们也可以看到这是用来命名窗口名称的 ...
- Joblogs&mdash;&mdash;ContentValues的使用
ContentValues在Android的SQLiteDatabase.update (String table, ContentValues values, String whereClause, ...
- IOS项目自动构建
# Sets the target folders and the final framework product. # 如果工程名称和Framework的Target名称不一样的话,要自定义FMKN ...
- npm install、npm install --save、npm install --save --dev、npm install -S、npm install -D的区别
npm install X: 会把X包安装到node_modules目录中 不会修改package.json 之后运行npm install命令时,不会自动安装X npm install X –sav ...
- css position相对定位与绝对定位彻底搞懂
定位position position本身就有给...定位的意思 position属性的值: static ---默认值 relative ---相对定位 absolute ---绝对定位 fixed ...
- 20165315 2017-2018-2《Java程序设计》课程总结
20165315 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安 ...
- 057 Hive项目案例过程
1.说明 这里只粘贴一张,图,主要针对的hive的项目的实践过程. 2.图 3.需求 统计PV 统计注册人数 => 这个是一个公司会关注的,每天的注册率. 统计ip 统计跳出率 => ip ...
- 20165236 实验四 Android程序设计
20165236 实验四 Android程序设计 一.实验报告 课程:Java程序设计 班级:1652班 姓名:郭金涛 学号:20165236 指导教师:娄嘉鹏 实验 ...
- WCF服务寄宿IIS与Windows服务 - C#/.NET
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...






