unix socket通信的方式
2017-11-07 20:20
197 查看
unix socket
#include "sys/un.h"
#include "netinet/in.h"
#include "sys/socket.h"
#include <sys/types.h>
#include <unistd.h>
#include <sys/time.h>
#include "string.h"
#include "pthread.h"
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define LISTEN_PATH "/data/test_socket"
static int listenFd = 0;
int init()
{
int rcv_len;
int on=1;
struct sockaddr_un servAddr;
unlink(LISTEN_PATH);
INFO("init");
servAddr.sun_family = AF_UNIX;
strcpy(servAddr.sun_path, LISTEN_PATH);
if((listenFd = socket(AF_UNIX, SOCK_DGRAM,0)) < 0) {
INFO("%s", strerror(errno));
return -1;
}
if((setsockopt(listenFd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)))<0) {
INFO("%s", strerror(errno));
return -1;
}
if(::bind(listenFd, (struct sockaddr*)&servAddr,sizeof(servAddr)) < 0){
close(listenFd);
INFO("%s", strerror(errno));
return -1;
}
INFO("listenfd %d",listenFd);
return 0;
}
bool Start_Server()
{
init();
int rcv_len;
const int BUFSIZE = 1024*1024;
while(true) {
char *socket_buf = (char *)malloc(BUFSIZE);
fd_set rs;
FD_ZERO(&rs);
FD_SET(listenFd, &rs);
int res = select(listenFd + 1, &rs, NULL, NULL, NULL);
if (FD_ISSET(listenFd, &rs)) {
if((rcv_len = recvfrom(listenFd, socket_buf, BUFSIZE, 0, NULL, NULL)) > 0) {
//memcpy(buf, socket_buf, rcv_len);
INFO( "live_play_add_ts_data------------->>>>>>>>>>>> dataSize = %d\n", rcv_len);
int ret = live_play_add_ts_data((unsigned char*)socket_buf,rcv_len);
free(socket_buf);
continue;
}
INFO("recvfrom waitEvent: %d",listenFd);
}
}
free(socket_buf);
return true;
}
client端的代码是:
#include "sys/un.h"
#include "netinet/in.h"
#include "sys/socket.h"
const char *LOCAL_SOCKET_PATH = "/data/test_socket";
int local_socket;
int main(int argc, char *argv[])
{
#include "sys/un.h"
#include "netinet/in.h"
#include "sys/socket.h"
#include <sys/types.h>
#include <unistd.h>
#include <sys/time.h>
#include "string.h"
#include "pthread.h"
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define LISTEN_PATH "/data/test_socket"
static int listenFd = 0;
int init()
{
int rcv_len;
int on=1;
struct sockaddr_un servAddr;
unlink(LISTEN_PATH);
INFO("init");
servAddr.sun_family = AF_UNIX;
strcpy(servAddr.sun_path, LISTEN_PATH);
if((listenFd = socket(AF_UNIX, SOCK_DGRAM,0)) < 0) {
INFO("%s", strerror(errno));
return -1;
}
if((setsockopt(listenFd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)))<0) {
INFO("%s", strerror(errno));
return -1;
}
if(::bind(listenFd, (struct sockaddr*)&servAddr,sizeof(servAddr)) < 0){
close(listenFd);
INFO("%s", strerror(errno));
return -1;
}
INFO("listenfd %d",listenFd);
return 0;
}
bool Start_Server()
{
init();
int rcv_len;
const int BUFSIZE = 1024*1024;
while(true) {
char *socket_buf = (char *)malloc(BUFSIZE);
fd_set rs;
FD_ZERO(&rs);
FD_SET(listenFd, &rs);
int res = select(listenFd + 1, &rs, NULL, NULL, NULL);
if (FD_ISSET(listenFd, &rs)) {
if((rcv_len = recvfrom(listenFd, socket_buf, BUFSIZE, 0, NULL, NULL)) > 0) {
//memcpy(buf, socket_buf, rcv_len);
INFO( "live_play_add_ts_data------------->>>>>>>>>>>> dataSize = %d\n", rcv_len);
int ret = live_play_add_ts_data((unsigned char*)socket_buf,rcv_len);
free(socket_buf);
continue;
}
INFO("recvfrom waitEvent: %d",listenFd);
}
}
free(socket_buf);
return true;
}
client端的代码是:
#include "sys/un.h"
#include "netinet/in.h"
#include "sys/socket.h"
const char *LOCAL_SOCKET_PATH = "/data/test_socket";
int local_socket;
int main(int argc, char *argv[])
{
local_socket = socket(AF_UNIX,SOCK_DGRAM,0); if (local_socket < 0) { printf("create local socket fail"); } struct sockaddr_un servaddr; socklen_t socklen = sizeof(struct sockaddr_un); memset(&servaddr,0,sizeof(servaddr)); servaddr.sun_family = AF_UNIX; strcpy(servaddr.sun_path, LOCAL_SOCKET_PATH); sendto(local_socket, buf, data_len, 0, (struct sockaddr*)&servaddr, socklen); return 0; }
相关文章推荐
- 【转】UNIX环境domain socket通信方式
- unix环境IPC通信之socket(三),tcp采用并发服务器编程实例,多进程方式 4000
- nginx以unix-domain-socket方式连接fastcgi(php)
- 在Silverlight中使用Socket进行通信(1)Socket"请求-回复"方式的简易数据交换
- (转自:Never-say-Never)Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- linux C ----- udp, tcp, unix socket通信简单例子
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信Select模型(多路复用), 实用Socket通信模板。
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信EPoll模型(多路复用), 实用Socket通信模板
- unix进程通信方式总结(上)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- unix进程间的通信方式
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- 在Silverlight中使用Socket进行通信(1)Socket"请求-回复"方式的简易数据交换
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
- Android客户端和服务器以TCP&&UDP方式互通之Socket通信原理
- java中使用socket进行udp方式通信时拔掉网线会导致send()方法阻塞
- unix下socket编程之polling, sigpoll, select方式
- nginx通过TCP以及unix-domain-socket连接fastcgi方式对比
- 客户端通过unix_socket方式连接MySQL