简单UDP服务器.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
简单UDP服务器

这篇在赛迪网上找到的文章很不错,搭建一个简单的UDP服务器,我已经在linux9下编译通过了,可以正确运行,需要修改几个“”符号的小东东,我打算 在它的基础上修改一下增加几个功能,以后再进行扩展吧。希望可以给找源代码的兄弟一点帮助。 ? 如何实现在Linux下创建服务程序 作者:赵建军 Linux系统能提供强大可靠的网络服务,并有管理程序对服务进行管 理。例如我们熟悉的Web、FTP和电子邮件等,它们既可以单独运行,也可以被守护进程inetd调用,而且运行得都非常好。但我们不能仅停留在赞叹中, 下面就给出两个服务程序程序和一个客户程序的例子,介绍服务程序和客户程序之间是如何沟通的。另外还要编辑配置一些文件,让服务程序也能接受服务管理程序 管理。 这两个服务程序功能相同,但一个是独立服务程序,另一个是被inetd调用的服务程序。这是TCP/IP网络服务的两大类,这里 将两个程序放在一起是为了比较程序结构和运行方式。两服务程序都在Red Hat Linux 7.1和TurboLinux 7.0上调试通过。 独立服务器 TCP和UDP是两大TCP/IP数据传输方式,套接口是建立服 务器客户机连接的机制,首先介绍它们建立通信联系的过程,然后给出一个TCP服务程序例子。 1.TCP套接口通信方式 对 于TCP服务器端,服务程序首先调用建立套接口的函数socket(),然后调用绑定服务IP地址和协议端口号函数bind()。绑定成功后调用被动监听 函数listen()等待客户连接,还要调用获取连接请求函数accept(),并一直阻塞到客户连接请求的到达,这个函数获取客户机IP地址和协议端口 号。 对于TCP客户端,客户程序启动后后调用建立套接口函数socket(),然后调用连接函数connect(),此函数与服务器通 过三次握手建立连接。 服务器和客户机建立连接后,就可以使用读函数read()和写函数write()收发数据了。数据交换完成后便各 自调用关闭套接口函数close()删除套接口。TCP套接口通信方式见图1所示。 ? 图1 TCP套接口通信方式 2.UDP 套接口通信方式 UDP程序与TCP的区别是无需建立连接。服务器首先启动,然后等待用户请求。客户机启动后便直接向服务器请求 服务,服务器接到请求后给出应答。 对于UDP服务器端,服务程序首先调用套接口函数socket(),然后调用绑定IP地址和协议端口 号函数bind()。之后调用函数recvfrom()接收客户数据,调用sendto()向客户发送数据。 对于UDP客户端,客户机 程序启动后调用套接口函数socket(),然后调用sendto()向服务器发送数据,调用recvfrom()接收服务器数据。 双 方数据交换成功后,各自调用关闭套接口函数close()关闭套接口。UDP套接口通信方式见图2所示。 ? 图2 UDP套接口通信方式 下 面给出独立服务程序的例子。这个程序虽然简单,但是与复杂程序有着相同的结构。 //程序名:server.c //功能:服务器从客户机读入一个字符,并将排在此字符后面的字符回送客户机 //服务器端口:9000 #include #include #include #include #include #include int main() { int pid;//用于存放fork()执行结果 int server_sockfd,client_sockfd;//用于服务器和客户机套接口描述符 int bind_flag,listen_flag;//用于存放bind()和listen()执行结果 int server_address_length,client_address_ length;//作为服务器客户机地址长变量 struct sockaddr_in server_address;//作为服务器地址结构变量(含地址和端口) struct sockaddr_in client_address;//作为客户机地址结构变量(含地址和端口) if((pid=fork())!=0) //用fork()产生新进程 exit(0) ; setsid() ; //以子进程开始下面的程序 函 数socket(),创建一个套接口,成功则返回套接口描述符。 server_sockfd=socket(AF_INET,SOCK_STREAM,0); if(server_sockfd0) { printf(“socket error \n”); exit(1);

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档