Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
HR_Socket_Msg_Demo
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
马伊齐
HR_Socket_Msg_Demo
Commits
69e3863c
Commit
69e3863c
authored
Dec 19, 2023
by
马伊齐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
注册注销部分Demo完成
parent
0c137f1d
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
198 additions
and
0 deletions
+198
-0
SocketReUnreClient.c
socket_re_unre/SocketReUnreClient.c
+52
-0
SocketReUnreServer.c
socket_re_unre/SocketReUnreServer.c
+146
-0
No files found.
socket_re_unre/SocketReUnreClient.c
0 → 100644
View file @
69e3863c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include "../lib/sock_msg.h"
#define SERVER_PORT 12345
int
main
(
int
argc
,
char
*
argv
[])
{
int
sock
;
struct
sockaddr_in
server_addr
;
char
buffer
[
BUFFER_SIZE
];
sock
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
sock
<
0
)
{
perror
(
"socket failed"
);
exit
(
EXIT_FAILURE
);
}
memset
(
&
server_addr
,
0
,
sizeof
(
server_addr
));
server_addr
.
sin_family
=
AF_INET
;
server_addr
.
sin_port
=
htons
(
SERVER_PORT
);
server_addr
.
sin_addr
.
s_addr
=
inet_addr
(
"127.0.0.1"
);
if
(
connect
(
sock
,
(
struct
sockaddr
*
)
&
server_addr
,
sizeof
(
server_addr
))
<
0
)
{
perror
(
"connect failed"
);
exit
(
EXIT_FAILURE
);
}
while
(
fgets
(
buffer
,
sizeof
(
buffer
),
stdin
)
!=
NULL
)
{
send
(
sock
,
buffer
,
strlen
(
buffer
),
0
);
ssize_t
bytes_received
=
recv
(
sock
,
buffer
,
BUFFER_SIZE
,
0
);
if
(
bytes_received
<
0
)
{
perror
(
"recv failed"
);
break
;
}
buffer
[
bytes_received
]
=
'\0'
;
printf
(
"Server replied: %s
\n
"
,
buffer
);
}
close
(
sock
);
return
0
;
}
\ No newline at end of file
socket_re_unre/SocketReUnreServer.c
0 → 100644
View file @
69e3863c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <poll.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include "../lib/sock_msg.h"
// 一个简单的回调函数示例
void
simple_callback
(
int
fd
,
uint32_t
events
)
{
char
buffer
[
BUFFER_SIZE
];
if
(
events
&
POLLIN
)
{
ssize_t
bytes_read
=
read
(
fd
,
buffer
,
BUFFER_SIZE
);
if
(
bytes_read
>
0
)
{
// 处理读取到的数据
printf
(
"Received from client: %s
\n
"
,
buffer
);
// 在接收到的数据后面加上" - echo"
const
char
*
echo_str
=
"- echo"
;
size_t
echo_str_len
=
strlen
(
echo_str
);
// 确保不会超出buffer的大小
if
(
bytes_read
+
echo_str_len
<
BUFFER_SIZE
)
{
strcat
(
buffer
,
echo_str
);
// 连接字符串
bytes_read
+=
echo_str_len
;
// 更新bytes_read以包含新加入的字符
}
write
(
fd
,
buffer
,
bytes_read
);
// 回显数据
}
else
{
// 客户端断开连接或出错
sock_ev_unregister
(
fd
);
// 注销事件监听
close
(
fd
);
}
}
// 可以根据需要添加对POLLHUP、POLLERR等事件的处理
}
int
main
(
int
argc
,
char
*
argv
[])
{
int
listen_fd
,
port
;
struct
sockaddr_in
server_addr
;
struct
pollfd
fds
[
MAX_CLIENTS
+
1
];
if
(
argc
<
2
)
{
fprintf
(
stderr
,
"Usage: %s <port>
\n
"
,
argv
[
0
]);
exit
(
EXIT_FAILURE
);
}
port
=
atoi
(
argv
[
1
]);
listen_fd
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
listen_fd
<
0
)
{
perror
(
"socket failed"
);
exit
(
EXIT_FAILURE
);
}
memset
(
&
server_addr
,
0
,
sizeof
(
server_addr
));
server_addr
.
sin_family
=
AF_INET
;
server_addr
.
sin_addr
.
s_addr
=
INADDR_ANY
;
server_addr
.
sin_port
=
htons
(
port
);
if
(
bind
(
listen_fd
,
(
struct
sockaddr
*
)
&
server_addr
,
sizeof
(
server_addr
))
<
0
)
{
perror
(
"bind failed"
);
exit
(
EXIT_FAILURE
);
}
if
(
listen
(
listen_fd
,
MAX_CLIENTS
)
<
0
)
{
perror
(
"listen failed"
);
exit
(
EXIT_FAILURE
);
}
// 初始化pollfd结构和sockets数组
memset
(
fds
,
0
,
sizeof
(
fds
));
memset
(
sockets
,
0
,
sizeof
(
sockets
));
fds
[
0
].
fd
=
listen_fd
;
fds
[
0
].
events
=
POLLIN
;
sockets
[
0
].
fd
=
listen_fd
;
sockets
[
0
].
callback
=
simple_callback
;
sockets
[
0
].
mode
=
SOCK_READ
;
while
(
1
)
{
int
nfds
=
poll
(
fds
,
MAX_CLIENTS
+
1
,
-
1
);
if
(
nfds
<
0
)
{
perror
(
"poll failed"
);
exit
(
EXIT_FAILURE
);
}
if
(
fds
[
0
].
revents
&
POLLIN
)
{
struct
sockaddr_in
client_addr
;
socklen_t
client_len
=
sizeof
(
client_addr
);
int
client_fd
=
accept
(
listen_fd
,
(
struct
sockaddr
*
)
&
client_addr
,
&
client_len
);
if
(
client_fd
<
0
)
{
perror
(
"accept failed"
);
continue
;
}
if
(
sock_ev_register
(
client_fd
,
simple_callback
,
SOCK_READ
)
<
0
)
{
fprintf
(
stderr
,
"Failed to register new client socket.
\n
"
);
close
(
client_fd
);
}
}
for
(
int
i
=
1
;
i
<
MAX_CLIENTS
+
1
;
i
++
)
{
if
(
sockets
[
i
].
fd
>
0
)
{
fds
[
i
].
fd
=
sockets
[
i
].
fd
;
fds
[
i
].
events
=
0
;
if
(
sockets
[
i
].
mode
&
SOCK_READ
)
{
fds
[
i
].
events
|=
POLLIN
;
}
if
(
sockets
[
i
].
mode
&
SOCK_WRITE
)
{
fds
[
i
].
events
|=
POLLOUT
;
}
}
}
for
(
int
i
=
1
;
i
<
MAX_CLIENTS
+
1
;
i
++
)
{
if
(
sockets
[
i
].
fd
>
0
&&
fds
[
i
].
revents
&
(
POLLIN
|
POLLOUT
))
{
sockets
[
i
].
callback
(
sockets
[
i
].
fd
,
fds
[
i
].
revents
);
}
}
}
close
(
listen_fd
);
return
0
;
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment