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
|
执行结果:
三.总结:
UDP套接字编程是不用建立链接的,所以服务器不用listen和accept,客户端不用connect,recvfrom和sendto中有对方的套接字信息。
UDP因为是面向链接的,所以在传输数据过程中比TCP要高效,适用于流媒体或对可靠性要求不高的应用。
本文转自 ye小灰灰 51CTO博客,原文链接:http://blog.51cto.com/10704527/1782717,如需转载请自行联系原作者
免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com
用户评论
相关推荐
linux下的UDP套接字编程
一.相关过程以及知识请详见我的另一篇博客《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