基于UDP的客户与服务器通信程序

彼岸花开一千年 范文 工作总结范文
精选回答

基于UDP的客户与服务器通信程序本文简介:实验名称基于UDP的客户与服务器通信程序所属课程名称TCP/IP协议与网络编程实验时间2010/11/12实验地点信控系二机房学生姓名陈红梅实验器材及环境PC机、VisualC++6.0实验目的1.在C++环境中编写代码,调用WinsockAIP基本函数,实现一个基于UDP的客户/服务器通信程序。实

基于UDP的客户与服务器通信程序本文内容:

实验名称

基于UDP的客户与服务器通信程序

所属课程名称

TCP/IP协议与网络编程

实验时间

2010/11/12

实验地点

信控系二机房

学生姓名

陈红梅

实验器材及环境

PC机、Visual

C++

6.0

实验目的

1.

在C++环境中编写代码,调用Winsock

AIP基本函数,实现一个基于UDP的客户/服务器通信程序。

实验内容

1.

熟练掌握函数的调用及其编程;

2.

理解掌握基于UDP的客户/服务器通信程序;

3.

理解函数的Winsock

AIP基本函数的调用、返回值的类型、函数功能等。

实验步骤

1、

进入Visual

C++6.0

2、

创建一个空工程sy1

3、

创建area.c文件

4、

流程图

iRecv=recvfrom()

调用失败

输出调用失败

开始

确定端口号

输出服务器

WSAStartup

sListen=Socket

Bind()

1

isend=sendto()

!=0

调用成功

Closesocket

(saccept)

Closesocket(saccept)

结束

==0

!=0

输出接收到的数据、IP地址、端口号

==0

5、

编写代码

程序一:服务器端

#include

#include

#include

#define

DEFAULT_PORT

5050

#define

BUFFER_LENGTH

1024

#pragma

comment(lib,“WS2_32.lib“)

void

main()

{

int

iPort=DEFAULT_PORT;

WSADATA

wsaData;

SOCKET

sSocket;

int

iLen,iRecv,iSend;

struct

sockaddr_in

ser,cli;

char

send_buf[]=“Hollo!I

am

a

server“;

char

recv_buf[BUFFER_LENGTH];

printf(“--------------------“);

printf(“Server

waiting“);

printf(“--------------------“);

if(WSAStartup(MAKEWORD(2,2),return;

}

sSocket=socket(AF_INET,SOCK_DGRAM,0);

if(sSocket==INVALID_SOCKET)

{

printf(“socket()函数调用失败:\n“,WSAGetLastError());

return;

}

ser.sin_family=AF_INET;

ser.sin_port=htons(iPort);

ser.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(sSocket,(LPSOCKADDR)

return;

}

iLen=sizeof(cli);

memset(recv_buf,0,sizeof(recv_buf));

while(1)

{

iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)

if(iRecv==SOCKET_ERROR)

{

printf(“recvfrom()函数调用失败:\n“,WSAGetLastError());

break;

}

else

if(iRecv==0)

break;

else

{

printf(“recvfrom():%d\n“,recv_buf);

printf(“客户端的IP地址、端口号:%d\n“,inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));

}

iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)

if(iSend==SOCKET_ERROR)

{

printf(“sendto()函数调用失败:\n“,WSAGetLastError());

break;

}

else

if(iSend==0)

break;

else

{

printf(“sendto():调用成功!\n“);

}

}

closesocket(sSocket);

WSACleanup();

}

流程图二:

结束

提示输入地址

输出调用失败

开始

带参main()定义变量

WSAStartup

Socket()

Recvfrom()

sendto()

WSAcleanup()

Closesocket()

Largc<2

接收数据初始化缓冲区

程序二:客户机端程序

#include

#include

#include

#define

DEFAULT_PORT

5050

#define

DATA_BUFFER

1024

#pragma

comment(lib,“WS2_32.lib“)

void

main(int

argc,char*

argv[])

{

WSADATA

wsaData;

SOCKET

sClient;

int

iPort=5050;

int

iLen;

int

isend,iRecv;

char

send_buf[]=“Hello!

I

am

a

client“;

char

recv_buf[DATA_BUFFER];

struct

sockaddr_in

ser;

if(argc<2)

{

printf(“输入服务器的IP地址:\n“);

return;

}

else

memset(recv_buf,0,sizeof(recv_buf));

if(WSAStartup(MAKEWORD(2,2),return;

}

sClient=socket(AF_INET,SOCK_DGRAM,0);

if(sClient==INVALID_SOCKET)

{

printf(“socket()函数调用失败:%d\n“,WSAGetLastError());

return;

}

ser.sin_family=AF_INET;

ser.sin_port=htons(iPort);

ser.sin_addr.s_addr=inet_addr(argv[1]);

iLen=sizeof(ser);

isend=sendto(sClient,send_buf,sizeof(send_buf),0,(struct

sockaddr*)

if(isend==SOCKET_ERROR)

{

printf(“sendto()函数调用失败:%d\n“,WSAGetLastError());

return;

}

else

if(isend==0)

return;

else

printf(“sendto()调用成功:\n“);

iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct

sockaddr*)

if(iRecv==SOCKET_ERROR)

{

printf(“recvfrom()函数调用失败:%d\n“,WSAGetLastError());

return;

}

else

if(iRecv==0)

return;

else

{

printf(“sendto():%s\n“,recv_buf);

printf(“-------------------------------\n“);

}

closesocket(sClient);

WSACleanup();

}

6、编译程序

7、查看运行

8、出错分析

实验总结

1.

函数功能是:完成Winsock服务的初始化,从而可以在应用程序当中调用任何一个Winsock

API函数;

2.

函数调用成功时返回0

3.

应用程序只能在一次成功的WSAStartup()调用之后才能进一步调用其它函数;

实验心得

完成此次的实验报告单后我的感受有:

1、

对学过的知识不能够真正理解。

2、

对学过的理论知识不能在实际问题中学以致用。

3、

对循环语句的逻辑思维不理解。

4、

对一些语句的使用语法模糊不清。不能正确的用了流程图来反映其代码的含义及其做题思路。

花开无声 2022-07-19 20:53:33

相关推荐

多啦A梦来我家

那天,我正在家里看书,突然一道蓝光闪过,一个蓝色的物体莫名其妙得出现在我家,把我吓得跪在了地上。我颤抖着瞥了一眼,突然发现那个怪物原来是多啦a梦!惊魂稍定的我还没有说出话,它就茫然的问:这是哪啊?我努力从牙缝里...
展开详情

我所期待的星期天

唉!讨厌的星期天又来了!一座座堆积如山的作业等我去铲平,还要穿梭于各上辅导班之间。一天到晚忙得不亦乐乎!如果星期天像我所期待的那样,该有多好啊!当我睁开蒙胧的睡眼,快乐而有意义的一天开始了。吃完早饭,我看看课外...
展开详情

拿报纸

我隔壁的刘爷爷去成都避暑了,刘叔叔在家,刘叔叔每天都要上班,他叫我来拿报纸,我答应了他,帮他们拿了一个月的报纸。刘爷爷回来了,他发现报纸不在了,以为是被偷了,他敲了我的门,问我报纸在不在我这,我说:在,我就把报...
展开详情

黄太狼的故事(五)打工记

黄太狼为了能补交上医药费,决定外出打工,黄太狼收拾行李,离开了家,踏上了挣钱的路。心里虽然不情愿,但是也没别地办法,只好认命了!黄太狼来到建筑师河马的家,他敲了敲门,发现河马大师不在,于是,他在河马大师家旁边的...
展开详情

树的故事

从前有一棵树,树上长着很多叶子。一天,树枝对叶子说:喂,你为什么总是跟我抢营养,你有总就给我滚。叶子被激怒了,便说:好,我走。时间似箭飞过,转眼间到了秋天,树上的叶子一片一片的从树上落下来。过了一段时间,树开始...
展开详情

精选推荐更多>

同茫茫宇宙相比地球是渺小的说明方法

同茫茫宇宙相比地球是渺小的说明方法是作比较。
作比较是将两种类别相同或不同的事物、现象加以比较来说明事物特征的说明方法。说明某些抽象的或者是人们比较陌生的事物,可以用具体的或者大家已经熟悉的事物和它比较,使读者通过比较得到具体而鲜明的印象。事物的特征也往往在比较中显现出来。在作比较的时候,可以是同类相比,也可以是异类相比,可以对事物进行“横比”,也可以对事物进行“纵比”。
作用:把……与……进行比较,突出强调了说明对象的特点。
例句:永定河发水时,来势很猛,以前两岸河堤常被冲毁,但是这座桥却从没出过事,足见它的坚固。——《中国石拱桥》

秋赏菊的前一句是什么

“秋赏菊”的全句是“踏秋赏菊去登高”,上一句是“重阳节,要敬老”。
出自人教版部编本二年级下册课文识字2《传统节日》:春节到,人欢笑,贴窗花,放鞭炮。元宵节,看花灯,大街小巷人如潮。清明节,雨纷纷,先人墓前去祭扫。过端午,赛龙舟,粽子艾香满堂飘。七月七,来乞巧,牛郎织女会鹊桥。过中秋,吃月饼,十五圆月当空照。重阳节,要敬老,踏秋赏菊去登高。转眼又是新春到,全家团圆真热闹。
中国传统节日,是中华民族悠久历史文化的重要组成部分,形式多样、内容丰富。传统节日的形成,是一个民族或国家的历史文化长期积淀凝聚的过程。中华民族的古老传统节日,涵盖了原始信仰、祭祀文化、天文历法、易理术数等人文与自然文化内容,蕴含着深邃丰厚的文化内涵。从远古先民时期发展而来的中华传统节日,不仅清晰地记录着中华民族先民丰富而多彩的社会生活文化内容,也积淀着博大精深的历史文化内涵。

酯化反应可逆吗

酯化都是可逆反应,酯化在浓硫酸中进行,同时生成的酯在酸性条件下会发生水解,所以是可逆反应。酯化反应,是一类有机化学反应,是醇跟羧酸或含氧无机酸生成酯和水的反应。分为羧酸跟醇反应和无机含氧酸跟醇反应和无机强酸跟醇的反应三类。
有机化学又称为碳化合物的化学,是研究有机化合物的组成、结构、性质、制备方法与应用的科学,是化学中极重要的一个分支。含碳化合物被称为有机化合物是因为以往的化学家们认为这样的物质一定要由生物(有机体)才能制造;然而在1828年的时候,德国化学家弗里德里希·维勒,在实验室中首次成功合成尿素(一种生物分子),自此以后有机化学便脱离传统所定义的范围,扩大为烃及其衍生物的化学。

精卫填海是民间故事吗

《精卫填海》是民间故事。
《精卫填海》是中国上古神话传说之一。相传精卫本是炎帝神农氏的小女儿,名唤女娃,一日女娃到东海游玩,溺于水中。死后的女娃化作花脑袋、白嘴壳、红色爪子的一种神鸟,每天从山上衔来石头和草木,投入东海,然后发出“精卫、精卫”的悲鸣,好像在呼唤着自己。
基于不同的研究视角,人们把“精卫填海”神话归于不同的神话类型。“精卫填海”神话属于典型的变形神话,且属于变形神话中的“死后托生”神话,即将灵魂托付给现实存在的一种物质。不仅如此,“精卫填海”还属于复仇神话,女娃生前与大海无冤无仇,但是却不慎溺水身亡,如此与大海结下仇恨,化身为鸟终身进行填海的复仇事业。
中国上古神话中记录了很多典型的非自然死亡,其中的意外让人看到了先人在自然面前的弱小和无能为力,同时也透出了生命的脆弱。女娃的死就是一种因事故而亡,展现出生命的脆弱和大海的强大。
著名作家茅盾则认为:精卫与刑天是属于同型的神话,都是描写百折不回的毅力和意志的,这是属于道德意识的鸟兽神话。
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200