


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机网络原理实验报告UDP网络聊天程序设计班级:计算机 1301 班 学号: 1307010116 :席凤凯实验五 UDP 网络聊天程序设计一实验目的:编程设计基于 UDP 的简单聊天室程序,实现服务器与客户端之间的对话通信功能。二实验原理:网络编程一般都是基于 TCP 或 UDP 的,一般过程如下:(1)TCP 编程的服务器端与客户端一般步骤: 服务器端:1、创建一个 socket,用函数socket。;2、绑定 IP 地址、端口等信息到 socket 上,用函数 bind();3、开启监听 ,用函数 listen();4、接收客户端上来的连接 ,用函数 accept();5、收发数据,用
2、函数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、关闭网络连
3、接 ;客户端:1、创建一个 socket,用函数 socket();2、设置对方的 IP 地址和端口等属性 ;3、发送数据 ,用函数 sendto();4、关闭网络连接 ; 三实验容: 编辑代码:(1 )服务器源程序:#include <stdio.h> 标准输入输出头文件#include <netinet/in.h> 互联网地址族#include varpa/inet.h> LINUX 下 C 语言程序的 INTERNET定义头文件#include <unistd.h> 符号常量#include vfcntl.h> 文件控制#include v
4、sys/stat.h> 文件状态#include <sys/types.h> 基本系统数据类型#include <sys/socket.h> 套接字接口#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。/第二个参数是套接字类型。TC
5、P的是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 sockad
6、dr_in);bzero(&addr,sizeof(addr);addr.sin_family=AF_INET; /地址家族。addr.sin_port=htons(LOCALPORT); /端口。这个 port 是自己申明的变量,一般自己申明 的端口号要大于 1024 。地址是一个结构体。用htonl 把它转化为网络字节序。if(bind(s,(struct sockaddr *)&addr,sizeof(addr)<0)perror("connect.");exit(1);elseprintf("bind ok. n");pri
7、ntf("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,(stru
8、ct 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 mseea
9、ge you recving is:%s n",msg);sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&addr,len);(2)客户端源代码:#include <stdio.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#include <sys/types.h>#include &
10、lt;sys/socket.h>#define REMOTEPORT 4567 /直/ 接定义连接服务器端口。#define REMOTEIP int 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);elseprin tf("socket cr
11、eated .n");prin tf("socked id: %d n",s);prin tf("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;while (1)bzero(msg,sizeof(msg);len = read(STDIN_FILENO,msg,sizeo
12、f(msg);if(se ndto(s,msg,sizeof(msg),0, &addr,sizeof(addr)<0) perror("send message worry!");exit(1);prin tf("se nd message is:%sn",msg);四.实验结果截图:XfKDili乞i七笳 转嚣11血山I I > *i It. "11 J h . s' fKciriivl lad renvied i A: 3iiemjteb hnJ.Cnr-n I pi*r t JS4S7Thr 址、5萼0 屮&
13、gt;ti rrt-t ill- i -I'lb 1 i疋刚EJ-tSftCD 務貿空 ffitXfDren i 邸爵 m I ho I ran i I ./ u h ockr L cjcLed.rd.(IrrnnieI2Td Q <)rtncEff poi i; j hr In crnd fii? i 5 :ho I In五修改后的代码(修改后可以是自己输入端口号和 ip 号) 客户端代码:#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <
14、arpa/inet.h>#include <errno.h>#include <netdb.h> /* 包括结构 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,portnumbe
15、r;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)<0)fprintf(stderr,"Usage:%s hostname portnumber an",argv0);
16、 exit(1);/ 建立客户端 Sockfd 描述符if (sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) fprintf(stderr,"Socket error:%s an",strerror(errno); exit(1);/调用函数 connect 之前,需要指定服务器进程的套接字地址/ 填充 sockaddr 结构 bzero(&server_addr,sizeof (struct sockaddr_in); server_addr.sin_family=AF_INET;server_addr.sin_port=hton
17、s(portnumber);/ server_addr.sin_addr= *(struct in_addr *) host->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
18、,1024)=-1) fprintf(stderr,"Read error: %s n",strerror(errno); exit(1);buffernbytes=''printf(" 收到: %s n",buffer); / 结束通信 / 关闭连接close(sockfd);exit(0); 服务端代码:#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#includ
19、e <errno.h>/ 标准输入输出头文件/ 与套接字相关的函数声明和结构定义/ 某些结构体声明、宏定义/ 某些函数声明/ 查看错误代码/* 以上为包含必要的头文件,其中几个头文件是几乎每一个网络程序所必需的,如<sys/socket.h>, <netinet/in.h> 等 */int main(int argc,char *argv) printf("=n"); printf("= server =n"); printf("=n");int sockfd,new_fd;struct socka
20、ddr_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 portn
21、umber 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);/ 填充服务器的套接字地址结构 / 开始捆绑 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州国企招聘:2025贵州省水利投资(集团)有限责任公司招聘84人考前自测高频考点模拟试题及完整答案详解1套
- 2025年工业互联网平台生物识别技术在智能医疗健康技术进步中的应用报告
- 2025年工业互联网平台增强现实交互技术在智能工厂生产信息化中的应用分析报告
- 2025年成人教育线上学习模式创新成人教育课程设计与开发实践策略实践报告
- 2025年美妆个性化定制服务模式与美容护肤行业品牌竞争力提升报告
- 2025版汽车维修行业环保设施投资与运营合同
- 2025年个人出租房出售合同范本
- 2025年度物流行业劳动合同编制与管理规范
- 2025年二手房买卖合同签订中的合同解除与违约责任承担
- 2025年专业厨师个人品牌推广与服务合同
- 学校食堂病媒生物防制工作计划
- 护理业务查房与护理教学查房的区别
- 资产评估工作的方案(5篇)
- 中国工分制管理制度
- 2025-2030年中国城市轨道交通行业市场现状供需分析及投资评估规划分析研究报告
- 乌镇景区管理制度
- 国企职称评聘管理制度
- 公司意识形态管理制度
- 微电网短期负荷预测-洞察阐释
- 月饼代销合同协议书
- 精神康复与躯体管理训练体系
评论
0/150
提交评论