linux下的UDP套接字编程

作者:佚名 上传时间:2019-04-13 版权申诉

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





二.相关代码:

server.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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 < 0)
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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
2
3
4
5
6
7
8
9
10
11
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

执行结果:

linux下的UDP套接字编程


linux下的UDP套接字编程





三.总结:

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

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










本文转自 ye小灰灰  51CTO博客,原文链接:http://blog.51cto.com/10704527/1782717,如需转载请自行联系原作者

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
linuxUDP套接编程
一.相关过程以及知识请详见我的另一篇博客《winsock套接字编程》,这里不再累述。 二.相关代码:
Linux简单套接编程
ReceiveData.c文件用来开启socket服务,等待客户端连接;SendData.c文件用来连接服务器的Socket服务,既可以发送通过键盘输入的信息,也可以发送系统文件。其中编译好SendD
RAR
0B
2019-02-23 14:02
linux网络编程套接
linux下的网络开发带套接字的,包括服务端和客户端,有makefile
ZIP
0B
2019-03-04 09:45
初学Sockets编程(三) UDP套接
UDP的过程通信看上去比TCP简单一些,但也有许多细节需要注意。比如,UDP套接字使用前不必连接,TCP类似于电话通信,UDP类似于邮件通信,UDP套接字就像一个邮箱,可以
UDP套接
UDP套接字是网络编程中使用的一种无连接的套接字类型,主要用于无需建立可靠连接、低延迟的数据传输。
zip
18.32KB
2024-05-01 04:59
linux网络编程原始套接魔力
关于linux下原始要接字编程的相关知识
PDF
0B
2019-01-17 23:34
Linux套接详解(一)----TCP/UDP区别与联系
TCP/IP简介 TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制协议(TCP)和网际协议(IP),但是实际上是一
udp协议编程c#编程套接
用udp协议开发的简单通讯程序,属于套接字,vs2008开发
RAR
913KB
2021-05-03 13:01
Linux网络编程:原始套接魔力【
可以接收链路层 MAC 帧的原始套接字 前面我们介绍过了通过原始套接字 socket(AF_I
Linux网络编程:原始套接魔力【
可以接收链路层 MAC 帧的原始套接字 前面我们介绍过了通过原始套接字 socket(AF_I