UDP套接字编程 返回系统时间

计算机网络实验

简单UDP套接字编程

这是学校老师自己改进了一点的题目。我预习了好久才搞明白,同学来问的时候,一大堆简单问题实在是不想回答...所以,这时候我觉得博客是个好东西!
我的任务是做客户端和服务器,并通过修改服务器,实现在客户端输入GetTime,然后经过服务器返回当前系统时间**
==首先,Ubuntu系统==
这个是不可少的,因为我们学的这个套接字就是在ubuntu上实现的,我是装的ubuntu16.04,没条件的装虚拟机也可以。

这个流程最好还是熟悉一下

此次UDP套接字程序步骤

  1. 创建套接字
  2. 命名套接字
  3. 在服务器上,等待消息
  4. 在客户端上,发送消息
  5. 将响应发送回客户端
  6. 关闭套接字
    具体程序不给出,网上参考有很多,为了节省时间,老师给的代码,虽然有自己修改的,但是不敢发出来,毕竟老师还是很牛批的,万一找到我追究责任,那我不扯犊子了嘛。所以主要写写例如sendto,recvfrom之类的用法。

1.创建套接字

使用系统命令==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;
        }

说实话,这个预习还真是恶心。。。因为没接触过,“弄清”这些函数花了好久。还一大堆东西没弄明白。
仓促写个这玩意。难免有错误,发现请指出。。。

最后的最后,给个参考网址

参考链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容