linux系统下的udp套接字编程,linux下的UDP套接字编程

一.相关过程以及知识请详见我的另一篇博客《winsock套接字编程》,这里不再累述。

二.相关代码:

server.c:1 /****************************************

2     > File Name:server.c

3     > Author:xiaoxiaohui

4     > mail:1924224891@qq.com

5     > Created Time:2016年05月21日 星期六 15时05分23秒

6 ****************************************/

7

8 #include

9 #include

10 #include

11 #include

12 #include

13 #include

14 #include

15 #include

16

17 const int PORT = 9090;

18 const int LEN = 1024;

19 int serverSock;

20 struct sockaddr_in local;

21 struct sockaddr_in client;

22

23

24 int main()

25 {

26     serverSock = socket(AF_INET, SOCK_DGRAM, 0);

27

28     local.sin_family = AF_INET;

29     //local.sin_addr.s_addr = htonl(INADDR_ANY);

30     local.sin_port = htons(PORT);

31     local.sin_addr.s_addr = inet_addr("127.0.0.1");

32     bind(serverSock, (struct sockaddr*)&local, sizeof(local));

33

34     char buf[LEN];

35     while(1)

36     {

37         int ret = 0;

38         socklen_t  len = sizeof(client);

39         memset(buf, '\0', LEN);

40         ret = recvfrom(serverSock, buf, LEN - 1, 0, (struct sockaddr*)&client, &len);

41

42         printf("ret is %d", ret);

43         if(ret == 0)

44         {

45             printf("client is closed!\n");

46             exit(2);

47         }

48         else if(ret 

49         {

50             perror("recvfrom");

51             continue;

52         }

53         else

54         {

55             buf[ret] = '\0';

56             printf("client[ip:%s][port:%d]# %s\n", inet_ntoa(client.sin_addr), \

57                     ntohs(client.sin_port), buf);

58             fflush(stdout);

59         }

60

61         if(strstr(buf, "quit") != NULL)

62         {

63             close(serverSock);

64             return 0;

65         }

66     }

67     return 0;

68 }

client.c:1 /****************************************

2     > File Name:client.c

3     > Author:xiaoxiaohui

4     > mail:1924224891@qq.com

5     > Created Time:2016年05月21日 星期六 15时35分32秒

6 ****************************************/

7

8 #include

9 #include

10 #include

11 #include

12 #include

13 #include

14 #include

15

16 const int PORT = 9090;

17 const char* IP = "127.0.0.1";

18 //const char* IP = "192.168.0.145";

19 const int LEN = 1024;

20 int clientSock;

21 struct sockaddr_in server;

22

23 int main()

24 {

25

26     clientSock = socket(AF_INET, SOCK_DGRAM, 0);

27

28     server.sin_family = AF_INET;

29     server.sin_addr.s_addr = inet_addr(IP);

30     server.sin_port = htons(PORT);

31

32     char buf[LEN];

33     while(1)

34     {

35         memset(buf, '\0', LEN);

36         printf("please input: ");

37         fflush(stdout);

38         gets(buf);

39

40         int ret = sendto(clientSock, buf, strlen(buf), 0, (struct sockaddr*)&server, sizeof(server));

41         if(ret <= 0)

42         {

43             perror("sendto");

44             continue;

45         }

46

47         if(strcmp(buf, "quit") == 0)

48         {

49             close(clientSock);

50             return 0;

51         }

52     }

53

54     return 0;

55 }

Makefile:1 .PHONY:all

2 all:server client

3

4 server:server.c

5     gcc -o $@ $^ -g

6 client:client.c

7     gcc -o $@ $^ -g

8

9 .PHONY:clean

10 clean:

11     rm -f server client

执行结果:

44c283261c1ba53960e42b5139b2602b.png

a30eb6784c7c598082a0cdadbe7452ca.png

三.总结:

UDP套接字编程是不用建立链接的,所以服务器不用listen和accept,客户端不用connect,recvfrom和sendto中有对方的套接字信息。

UDP因为是面向链接的,所以在传输数据过程中比TCP要高效,适用于流媒体或对可靠性要求不高的应用。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值