首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

《Unix网络编程》:来射字符串(4):UDP版

2012-11-26 
《Unix网络编程》:回射字符串(4):UDP版《Unix网络编程卷1:套接字联网API》这本书附带了许多短小精美的小程序,

《Unix网络编程》:回射字符串(4):UDP版

    《Unix网络编程卷1:套接字联网API》这本书附带了许多短小精美的小程序,我在阅读此书的时候,将书上的代码按照自己的理解重写了一遍(大部分是抄书上的),加深一下自己的理解(纯看书太困了,呵呵)。此例子在Ubuntu10.04上测试通过。

    PS:程序里使用了包裹函数(首字母是大写的函数)和常量(所有字母都是大写的常量)的声明和定义在my_unp.h和my_unp.c中,地址:http://blog.csdn.net/aaa20090987/article/details/8096701

    程序简介:这一对例子演示了服务器和客户端使用UDP协议传输数据的基本原理和流程。

服务器端:

#include "my_unp.h"void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen){intn;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);}}intmain(int argc, char **argv){int sockfd;struct sockaddr_inservaddr;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

热点排行