zoukankan      html  css  js  c++  java
  • UNIX域套接字——UNIX domain socket(DGRAM)

    #define UNIX_PATH_MAX    108
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    
    #include <stdio.h>
    
    #define BUFSIZE 32
    
    int main(void)
    {
    	int sd;
    	char buf[BUFSIZE];
    	struct sockaddr_un hisend;
    	int ret;
    
    	sd = socket(PF_LOCAL, SOCK_DGRAM, 0);
    	if (sd == -1) {
    		perror("socket()");
    		goto socket_err;
    	}
    
    	hisend.sun_family = AF_UNIX;
    	snprintf(hisend.sun_path, UNIX_PATH_MAX, "rcv_sock");
    
    	ret = connect(sd, (struct  sockaddr *)&hisend, sizeof(hisend));
    	if (ret == -1) {
    		perror("connect()");
    		goto connect_err;
    	}
    
    	while (1) {
    		ret = read(0, buf, BUFSIZE);
    		/* if error */
    		if (ret == 0) {
    			break;
    		}
    
    		write(sd, buf, ret);
    		ret = read(sd, buf, BUFSIZE);
    		if (ret == -1) {
    			perror("read(sd)");
    			break;
    		}
    		write(1, buf, ret);
    	}
    
    	close(sd);
    
    	return 0;
    
    
    
    accept_err:
    connect_err:
    	close(sd);
    socket_err:
    	return 1;
    }
    #define UNIX_PATH_MAX    108
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    
    #include <stdio.h>
    
    #define BUFSIZE 32
    
    int main(void)
    {
    	int sd;
    	char buf[BUFSIZE];
    	struct sockaddr_un myend, hisend;
    	socklen_t hislen;
    	int ret;
    
    	sd = socket(PF_LOCAL, SOCK_DGRAM, 0);
    	if (sd == -1) {
    		perror("socket()");
    		goto socket_err;
    	}
    
    	myend.sun_family = AF_UNIX;
    	snprintf(myend.sun_path, UNIX_PATH_MAX, "rcv_sock");
    
    	unlink(myend.sun_path);
    	ret = bind(sd, (struct  sockaddr *)&myend, sizeof(myend));
    	if (ret == -1) {
    		perror("bind()");
    		goto bind_err;
    	}
    
    	hislen = sizeof(hisend);
    	while (1) {
    		ret = recvfrom(sd, buf, BUFSIZE, 0, (struct sockaddr *)&hisend, &hislen);
    		/* if error */
    		if (ret == 0) {
    			break;
    		}
    
    		write(1, buf, ret);
    		ret = sendto(sd, "xxxxx
    ", 6, 0, (struct sockaddr *)&hisend, hislen);
    		if (ret == -1) {
    			perror("write(sd)");
    			break;
    		}
    	}
    
    	close(sd);
    
    	return 0;
    
    
    
    bind_err:
    	close(sd);
    socket_err:
    	return 1;
    }



  • 相关阅读:
    adb检测不到夜神模拟器
    夜神模拟器相关设置
    dos窗口下查看系统环境变量设置,输出dos命令结果到文件
    JavaScript DOM操作案例列表的高亮显示
    JavaScript DOM操作案例美女相册
    JavaScript DOM操作案例阻止超链接跳转
    JavaScript DOM操作案例点击按钮修改ul背景颜色
    Git 状态 untracked 和 not staged的区别
    GitPython模块简介
    解决error: failed to push some refs to 'xxxx'
  • 原文地址:https://www.cnblogs.com/pangblog/p/3400221.html
Copyright © 2011-2022 走看看