UNIX UDP回射服务器/客户端
来源:互联网 发布:淘宝三钻买家消费能力 编辑:程序博客网 时间:2024/05/17 01:23
《Unix网络编程》这本书附带了许多短小精美的小程序,我在阅读此书的时候,将书上的代码按照自己的理解重写了一遍(大部分是抄书上的),加深一下自己的理解(纯看书太困了,呵呵)。此例子在Ubuntu10.04上测试通过。
PS:程序里使用了包裹函数(首字母是大写的函数)和常量(所有字母都是大写的常量)的声明在my_unp.h文件中,定义在unp_base.c和unp_thread.c中,地址:http://blog.csdn.net/aaa20090987/article/details/8096701
程序简介:这一对例子演示了服务器和客户端使用UDP协议传输数据的基本原理和流程。
服务器端:
- #include "my_unp.h"
- void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)
- {
- int n;
- socklen_t len;
- char mesg[MAXLINE];
- //每当一个数据报到达时,先接收数据,然后再把数据返回给客户端
- while( 1 )
- {
- len = clilen;
- n = Recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
- Sendto(sockfd, mesg, n, 0, pcliaddr, len);
- }
- }
- int main(int argc, char **argv)
- {
- int sockfd;
- struct sockaddr_in servaddr, cliaddr;
- //建立一个基于IPv4数据报(udp)的套接字
- sockfd = Socket(AF_INET, SOCK_DGRAM, 0);
- memset(&servaddr, 0, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- servaddr.sin_port = htons(SERV_PORT);
- //把socket和socket地址结构联系起来
- Bind(sockfd, (SA *) &servaddr, sizeof(servaddr));
- dg_echo(sockfd, (SA *) &cliaddr, sizeof(cliaddr));
- return 0;
- }
客户端:
- #include "my_unp.h"
- void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
- {
- int n;
- char sendline[MAXLINE], recvline[MAXLINE + 1];
- //从终端获取一行字符串,将其写入套接字
- //然后从套接字一行字符串,将其写入终端
- while (Fgets(sendline, MAXLINE, fp) != NULL)
- {
- Sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
- n = Recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);
- recvline[n] = 0;
- Fputs(recvline, stdout);
- }
- }
- int
- main(int argc, char **argv)
- {
- int sockfd;
- struct sockaddr_in servaddr;
- if (argc != 2)
- error_quit("usage: udpcli <IPaddress>");
- //创建用于TCP协议的套接字
- sockfd = Socket(AF_INET, SOCK_DGRAM, 0);
- memset(&servaddr, 0, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_port = htons(SERV_PORT);
- //将程序的参数1(argv[1])转换成套接字地址结构
- Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
- dg_cli(stdin, sockfd, (SA *) &servaddr, sizeof(servaddr));
- return 0;
- }
运行示例(红色字体的为输入)
服务器端:
qch@ubuntu:~/code$ gcc my_unp.c server.c -o server
qch@ubuntu:~/code$./server
客户端:
qch@ubuntu:~/code$gcc my_unp.c client.c -o client
qch@ubuntu:~/code$./client 127.0.0.1
hello, world
hello, world
- UNIX UDP回射服务器/客户端
- UNIX TCP回射服务器/客户端(5):多线程服务器
- UDP服务器/客户端
- udp服务器与客户端
- udp服务器、客户端
- UDP服务器与客户端
- 回射客户端服务器UDP(echo client&&server based on UDP)
- UNIX网络编程学习(18)--UDP回射(服务器+客户端)程序
- unix网络编程卷一: 第八章:简单UDP客户端服务器通信(一)
- UNIX TCP回射服务器/客户端(1):用于测试的客户端
- UDP回射服务器
- UNIX网络编程——UDP回射服务器程序(初级版本)以及漏洞分析
- UNIX网络编程——使用select函数的TCP和UDP回射服务器程序
- UNIX TCP回射服务器/客户端(2):多进程服务器
- UNIX TCP回射服务器/客户端(3):使用select模型的服务器
- UNIX TCP回射服务器/客户端(4):使用epoll模型的服务器
- UNIX TCP回射服务器/客户端(6):进程池服务器
- UNIX TCP回射服务器/客户端(6):线程池服务器
- Python访问sqlite3的入门操作
- 生产者消费者模型
- java 中关于i = i++; 的bug
- Javascript中产生固定结果函数的优化
- Oracle分区之一:介绍
- UNIX UDP回射服务器/客户端
- 【iOS-cocos2d-X 游戏开发之一】在Mac下结合Xcode搭建Cocos2d-X开发环境!
- 体验js中splice()的强大
- VC控制台颜色设置
- 泛型的单例模式
- mysql master slave 主从安装
- 怎样用hibernate的hql查询查询成map或list
- springAOP
- pthread_cond