




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络原理实验报告UDP网络聊天程序设计班级:计算机1301班学号:1307010116姓名:席凤凯实验五 UDP网络聊天程序设计一实验目的:编程设计基于 UDP 的简单聊天室程序,实现服务器与客户端之间的对话通信功能。二实验原理:网络编程一般都是基于 TCP 或 UDP 的,一般过程如下:(1)TCP 编程的服务器端与客户端一般步骤:服务器端:1、创建一个 socket,用函数 socket();2、绑定 IP 地址、端口等信息到 socket 上,用函数 bind();3、开启监听,用函数 listen();4、接收客户端上来的连接,用函数 accept();5、收发数据,用函数 send()和 recv(),或者 read()和 write();6、关闭网络连接;7、关闭监听;客户端:1、创建一个 socket,用函数 socket();2、设置要连接的对方的 IP 地址和端口等属性;3、连接服务器,用函数 connect();4、收发数据,用函数 send()和 recv(),或者 read()和 write();5、关闭网络连接;(2) UDP 编程步骤如下:服务器端:1、创建一个 socket,用函数 socket();2、绑定 IP 地址、端口等信息到 socket 上,用函数 bind();3、循环接收数据,用函数 recvfrom();4、关闭网络连接;客户端:1、创建一个 socket,用函数 socket();2、设置对方的 IP 地址和端口等属性;3、发送数据,用函数 sendto();4、关闭网络连接;三实验内容:编辑代码:(1)服务器源程序:#include 标准输入输出头文件#include 互联网地址族#include LINUX 下 C 语言程序的 INTERNET 定义头文件#include 符号常量#include 文件控制#include 文件状态#include 基本系统数据类型#include 套接字接口#define LOCALPORT 4567/定义本地服务器端口int main(int argc,char *argv)int s,len;struct sockaddr_in addr;int addr_len;char msg256;int i=0;/ 编写一个函数用来初始化套接字和绑定套接字。/初始化套接字。 socket 参数第一个是网络套接字族。一般都是 AF_INET。/第二个参数是套接字类型。 TCP 的是 SOCK_STREAM。/而 UDP 的是 SOCK_DGRAM 的形式。/第三个是初始化的协议。一般都是 0。if ( s= socket(AF_INET, SOCK_DGRAM, 0) )0)perror(error);exit(1);elseprintf(socket created .n);printf(socked id: %d n,s);printf(remote port: %d n,LOCALPORT);/创建成功后输出信息。len=sizeof(struct sockaddr_in);bzero(&addr,sizeof(addr);addr.sin_family=AF_INET; /地址家族。addr.sin_port=htons(LOCALPORT); /端口。这个 port 是自己申明的变量,一般自己申明的端口号要大于 1024。addr.sin_addr.s_addr=htonl(INADDR_ANY);/地址是一个结构体。用 htonl 把它转化为网络字节序。if(bind(s,(struct sockaddr *)&addr,sizeof(addr)0)perror(connect.);exit(1);elseprintf(bind ok. n);printf(local port:%d n,LOCALPORT);/绑定套接字。while (1)bzero(msg,sizeof(msg);len =sizeof(struct sockaddr_in);/因为我们是用 UDP 的方式。所以我们这里用 recvform 来接收数据。若是 TCP 则采用 recv。/recvform 的参数。第一是套接字,第二个是你要接收的字符缓冲区。/第三个是缓冲区大小。第四个是标记我们设为 0 就好。/第五个参数是接收对方地址。第六个是地址长度。 if (i=recvfrom(s,msg,sizeof(msg),0,(struct sockaddr *)&addr,&len)=-1) printf(error receiving! n);exit(1);if(!strcmp(quitn, msg) /如果收到“ quit”,表示客户端要结束聊天。 sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&addr,len);printf(Chat end!n); /服务器发送“ quit”并结束,输出 Chat end!。 break;printf(The mseeage you recving is:%s n,msg);sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&addr,len);(2)客户端源代码:#include #include #include #include #include #include #include #include #define REMOTEPORT 4567 /直接定义连接服务器端口。#define REMOTEIP 127.0.0.1int main(int argc,char *argv)int s,len;struct sockaddr_in addr;int addr_len;char msg256;int i=0;/定义套接字并初始化,建立成功则输出信息。if ( s= socket(AF_INET, SOCK_DGRAM, 0) )0)perror(error);exit(1);elseprintf(socket created .n);printf(socked id: %d n,s);printf(remote ip: %s n,REMOTEIP);printf(remote port: %d n,REMOTEPORT);len=sizeof(struct sockaddr_in);bzero(&addr,sizeof(addr);addr.sin_family=AF_INET;addr.sin_port=htons(REMOTEPORT);addr.sin_addr.s_addr=inet_addr(REMOTEIP);while (1)bzero(msg,sizeof(msg);len = read(STDIN_FILENO,msg,sizeof(msg);if(sendto(s,msg,sizeof(msg),0,&addr,sizeof(addr)0) perror(send message worry!);exit(1);printf(send message is:%sn,msg) ;四实验结果截图:五修改后的代码(修改后可以是自己输入端口号和ip号)客户端代码:#include #include #include #include #include #include /*包括结构hostent(主机环境),获得主机信息的几个函数*/int main(int argc,char *argv) printf(=n); printf(= client =n); printf(=n); int sockfd,new_fd; struct sockaddr_in server_addr; struct hostent *host; int nbytes,portnumber; char buffer1024; if (argc!=3) fprintf(stderr,Usage:%s hostname portnumber an,argv0); exit(1); /获得服务器地址 if (host=gethostbyname(argv1)=NULL) fprintf(stderr,HostName Erro!); exit(1); if (portnumber=atoi(argv2)h_addr);/发起连接请求与远程服务器建立一个连接 if (connect(sockfd,(struct sockaddr *)(&server_addr),sizeof (struct sockaddr)=-1) fprintf(stderr,Bind error:%s an,strerror(errno); exit(1); /进行读写数据操作,将数据显示到标准输出上 if (nbytes=read(sockfd,buffer,1024)=-1) fprintf(stderr,Read error: %s n,strerror(errno); exit(1); buffernbytes=; printf(收到: %s n,buffer);/结束通信/关闭连接 close(sockfd); exit(0); 服务端代码:#include /标准输入输出头文件#include /与套接字相关的函数声明和结构定义#include /某些结构体声明、宏定义#include /某些函数声明#include /查看错误代码/*以上为包含必要的头文件,其中几个头文件是几乎每一个网络程序所必需的,如,等*/int main(int argc,char *argv) printf(=n); printf(= server =n); printf(=n); int sockfd,new_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size,portnumber; char hello=Hello, The Network! This is my first Server.n; if (argc!=2) fprintf(stderr,Usage:%s portnumber an,argv0); exit(1); /程序出现错误结束 if (portnumber=atoi(argv1)0) fprintf(stderr,Usage:%s portnumber an,argv0); exit(1); /atoi()将字符型转化为整型 /建立socket描述符(intnet协议簇,流套接字,使用默认协议) if (sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) fprintf(stderr,Socket error:%s an,strerror(errno); exit(1); /填充服务器的套接字地址结构sockaddr bzero(&server_addr,sizeof (struct sockaddr_in); server_addr.sin_family=AF_INET; server_addr.sin_addr.s_addr=htonl(INADDR_ANY); server_addr.sin_port=htons(portnumber); /开始捆绑sockfd描述符 if (bind(sockfd,(struct sockaddr *)(&server_addr),sizeof (struct sockaddr)=-1) fprintf(stderr,Bind error:%s an,strerror(errno); exit(1); /监听sockfd描述符if (listen(sockfd,5)=-1) /fprintf(stderr,Listen error:%s an,strerror(errno); exit(1); while(1) /阻塞服务器,直到客户程序建立连接 sin_size=sizeof (struct sockaddr_in); if (new_fd=accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size)=-1) /fprintf(stderr,Accept error:%s an,strerror(errno); exit(1); fprintf(stderr,Server get connection from %s :n,inet_ntoa(client_addr.sin_addr); if (write(new_fd,hello,strlen(hello)=-1) /fprintf(stderr,Write error:%s an,strerror(errno); exit(1); /通信结束,继续循环
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南省检验检测研究院集团有限公司社会招聘64人备考练习试题及答案解析
- 2025年黑河北安市司法局公开招聘公益性岗位人员2备考练习题库及答案解析
- 2025浙江舟山市定海区文化和广电旅游体育局招聘编外用工人员1人考试参考试题及答案解析
- 2025重庆綦江区赶水镇人民政府公益性岗位招聘3人考试参考试题及答案解析
- 2025年半导体存储盘行业研究报告及未来行业发展趋势预测
- 江西省2025-2026学年高三上学期9月份联考英语试卷(含答案无听力原文及音频)
- 2025年电感业务行业研究报告及未来行业发展趋势预测
- 河南省南阳市方城县第一中学2025-2026学年高二上学期开学检测语文试题(含答案)
- 2025年公安辅警招聘知识考试试题(答案+解析)
- 2025年安康市农业农村局事业单位高层次人才招聘(5人)笔试备考题库及答案解析
- 大棚搭建用工合同范本
- T/CCS 059-2023智能化煤矿运维技术架构与流程
- T/CAQI 96-2019产品质量鉴定程序规范总则
- DB31/T 300-2018燃气燃烧器具安全和环保技术要求
- 2025人教部编版语文四年级上册教学计划(含进度表)
- 纪委遴选笔试真题及答案详解
- 2025家庭保姆雇佣合同范本
- 危重患者血糖管理专家共识解读
- GB/T 45356-2025无压埋地排污、排水用聚丙烯(PP)管道系统
- 石墨产品的国际市场推广策略
- ktv店长合同范本
评论
0/150
提交评论