linux下unix socket通信--基于udp
来源:互联网 发布:超级捕快软件下载 编辑:程序博客网 时间:2024/04/29 18:02
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/un.h>
#include <unistd.h>
#define MSG_ADDR_A "/var/msg_addr_a"
#define MSG_ADDR_B "/var/msg_addr_b"
#define CMDLINE_LEN 512
int init_sock(int fg)
{
int l_sockfd = -1;
int l_ret = -1;
struct sockaddr_un st_sock_addr;
l_sockfd = socket(AF_UNIX,SOCK_DGRAM,0);
if (l_sockfd < 0) {
perror("cannot create the new cmd sock");
return -1;
}
if (fg == 0) {
st_sock_addr.sun_family = AF_UNIX;
strcpy(st_sock_addr.sun_path, MSG_ADDR_A);
unlink(MSG_ADDR_A);
l_ret = bind(l_sockfd, (struct sockaddr*)&st_sock_addr, sizeof(st_sock_addr));
if (l_ret == -1) {
perror("cannot bind the new cmd sock");
close(l_sockfd);
unlink(MSG_ADDR_A);
return -1;
}
} else {
st_sock_addr.sun_family = AF_UNIX;
strcpy(st_sock_addr.sun_path, MSG_ADDR_B);
unlink(MSG_ADDR_B);
l_ret = bind(l_sockfd, (struct sockaddr*)&st_sock_addr, sizeof(st_sock_addr));
if (l_ret == -1) {
perror("cannot bind the new cmd sock");
close(l_sockfd);
unlink(MSG_ADDR_B);
return -1;
}
}
return l_sockfd;
}
void msg_proc(int fg)
{
int fd = -1;
socklen_t addr_len;
struct sockaddr_un st_source_addr;
unsigned char cmdbuf[CMDLINE_LEN];
int l_ret = -1;
fd = init_sock(fg);
if (fd == -1) {
printf( "[%s]create cmd unix socket err! \n", __func__);
exit(1);
}
addr_len = sizeof(struct sockaddr_un);
if (fg) {
struct sockaddr_un st_sock_addr;
st_sock_addr.sun_family = AF_UNIX;
strcpy(st_sock_addr.sun_path, MSG_ADDR_A);
l_ret = sendto(fd, "1234", strlen("1234"), 0,
(struct sockaddr*)&st_sock_addr, sizeof(st_sock_addr));
bzero(cmdbuf, CMDLINE_LEN);
usleep(100000);
//l_ret = recvfrom(fd, cmdbuf, CMDLINE_LEN, 0, (struct sockaddr*)&st_sock_addr, &addr_len);
l_ret = recvfrom(fd, cmdbuf, CMDLINE_LEN, MSG_DONTWAIT, (struct sockaddr*)&st_sock_addr, &addr_len);
printf("cmd=%s\n", cmdbuf);
} else {
while (1) {
bzero(cmdbuf, CMDLINE_LEN);
l_ret = recvfrom(fd, cmdbuf, CMDLINE_LEN, 0, (struct sockaddr*)&st_source_addr,
&addr_len);
if (-1 == l_ret) {
perror("recv");
printf( "[%s]recv config err! .\n", __func__);
sleep(1);
continue;
}
printf("cmd=%s, path=%s\n", cmdbuf, st_source_addr.sun_path);
struct sockaddr_un st_des_addr;
st_des_addr.sun_family = AF_UNIX;
strcpy(st_des_addr.sun_path, MSG_ADDR_B);
l_ret = sendto(fd, "4567", strlen("4567"), 0,
(struct sockaddr*)&st_des_addr, sizeof(st_des_addr));
}
}
}
/*
gcc -o unix_udp unix_udp.c
server run: ./unix_udp 0
client run: ./unix_udp 1
*/
int main(int argc, char **argv)
{
int arg = atoi(argv[1]);
msg_proc(arg);
return 0;
}
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/un.h>
#include <unistd.h>
#define MSG_ADDR_A "/var/msg_addr_a"
#define MSG_ADDR_B "/var/msg_addr_b"
#define CMDLINE_LEN 512
int init_sock(int fg)
{
int l_sockfd = -1;
int l_ret = -1;
struct sockaddr_un st_sock_addr;
l_sockfd = socket(AF_UNIX,SOCK_DGRAM,0);
if (l_sockfd < 0) {
perror("cannot create the new cmd sock");
return -1;
}
if (fg == 0) {
st_sock_addr.sun_family = AF_UNIX;
strcpy(st_sock_addr.sun_path, MSG_ADDR_A);
unlink(MSG_ADDR_A);
l_ret = bind(l_sockfd, (struct sockaddr*)&st_sock_addr, sizeof(st_sock_addr));
if (l_ret == -1) {
perror("cannot bind the new cmd sock");
close(l_sockfd);
unlink(MSG_ADDR_A);
return -1;
}
} else {
st_sock_addr.sun_family = AF_UNIX;
strcpy(st_sock_addr.sun_path, MSG_ADDR_B);
unlink(MSG_ADDR_B);
l_ret = bind(l_sockfd, (struct sockaddr*)&st_sock_addr, sizeof(st_sock_addr));
if (l_ret == -1) {
perror("cannot bind the new cmd sock");
close(l_sockfd);
unlink(MSG_ADDR_B);
return -1;
}
}
return l_sockfd;
}
void msg_proc(int fg)
{
int fd = -1;
socklen_t addr_len;
struct sockaddr_un st_source_addr;
unsigned char cmdbuf[CMDLINE_LEN];
int l_ret = -1;
fd = init_sock(fg);
if (fd == -1) {
printf( "[%s]create cmd unix socket err! \n", __func__);
exit(1);
}
addr_len = sizeof(struct sockaddr_un);
if (fg) {
struct sockaddr_un st_sock_addr;
st_sock_addr.sun_family = AF_UNIX;
strcpy(st_sock_addr.sun_path, MSG_ADDR_A);
l_ret = sendto(fd, "1234", strlen("1234"), 0,
(struct sockaddr*)&st_sock_addr, sizeof(st_sock_addr));
bzero(cmdbuf, CMDLINE_LEN);
usleep(100000);
//l_ret = recvfrom(fd, cmdbuf, CMDLINE_LEN, 0, (struct sockaddr*)&st_sock_addr, &addr_len);
l_ret = recvfrom(fd, cmdbuf, CMDLINE_LEN, MSG_DONTWAIT, (struct sockaddr*)&st_sock_addr, &addr_len);
printf("cmd=%s\n", cmdbuf);
} else {
while (1) {
bzero(cmdbuf, CMDLINE_LEN);
l_ret = recvfrom(fd, cmdbuf, CMDLINE_LEN, 0, (struct sockaddr*)&st_source_addr,
&addr_len);
if (-1 == l_ret) {
perror("recv");
printf( "[%s]recv config err! .\n", __func__);
sleep(1);
continue;
}
printf("cmd=%s, path=%s\n", cmdbuf, st_source_addr.sun_path);
struct sockaddr_un st_des_addr;
st_des_addr.sun_family = AF_UNIX;
strcpy(st_des_addr.sun_path, MSG_ADDR_B);
l_ret = sendto(fd, "4567", strlen("4567"), 0,
(struct sockaddr*)&st_des_addr, sizeof(st_des_addr));
}
}
}
/*
gcc -o unix_udp unix_udp.c
server run: ./unix_udp 0
client run: ./unix_udp 1
*/
int main(int argc, char **argv)
{
int arg = atoi(argv[1]);
msg_proc(arg);
return 0;
}
0 0
- linux下unix socket通信--基于udp
- linux环境下基于udp socket简单聊天通信
- linux C ----- udp, tcp, unix socket通信简单例子
- 基于UDP的socket通信
- 基于UDP的Socket通信
- 基于LINUX系统的SOCKET通信,使用UDP协议.
- linux下socket通信代码的开发及总结---UDP
- Linux Socket UDP对等通信
- Linux Socket UDP对等通信
- Linux C socket 基于 UDP
- java基于UDP的socket通信
- IOS socket基于tcp/udp的通信
- 基于C#的UDP socket 通信
- 基于tcp和udp的socket通信
- Java基于UDP的Socket通信
- IOS socket基于tcp/udp的通信
- 基于UDP协议的socket通信
- 基于UDP协议的Socket通信
- 组策略知识
- 微信支付 php 公众平台及移动端服务器
- 电子商务平台支付接口开发原理及流程
- C 存储类型摘要
- 通过测试和代码告诉你Maven是如何使用mirror和repository的---学习笔记
- linux下unix socket通信--基于udp
- Android基础类之BaseAdapter
- 进程和线程学习理解
- JAVA窗口程序之入门
- Leetcode 238 Product of Array Except Self
- 常见的动态规划问题分析与求解
- python字符串/元组/列表/字典互转
- QT中PRO文件写法的详细介绍,很有用,很重要!
- 如何在linux下配置AndroidStudio开发环境