linux进程socket通信,linux进程间通信--socket套接字 实例代码

可以实现通信的代码实现,拿去用!

原文来自:http://blog.chinaunix.net/uid-26790551-id-3171897.html

服务器端:

#include

#include

#include

#include

#include

#include

#define UNIX_DOMAIN "/tmp/UNIX.domain"

int main(void)

{

int lsn_fd, apt_fd;

struct sockaddr_un srv_addr;

struct sockaddr_un clt_addr;

socklen_t clt_len;

int ret;

int i;

char recv_buf[1024];

char send_buf[1024];

//create socket to bind local IP and PORT

lsn_fd = socket(PF_UNIX, SOCK_STREAM, 0);

if(lsn_fd < 0)

{

perror("can't create communication socket!");

return 1;

}

//create local IP and PORT

srv_addr.sun_family = AF_UNIX;

strncpy(srv_addr.sun_path, UNIX_DOMAIN, sizeof(srv_addr.sun_path) - 1);

unlink(UNIX_DOMAIN);

//bind sockfd and sockaddr

ret = bind(lsn_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));

if(ret == -1)

{

perror("can't bind local sockaddr!");

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 1;

}

//listen lsn_fd, try listen 1

ret = listen(lsn_fd, 1);

if(ret == -1)

{

perror("can't listen client connect request");

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 1;

}

clt_len = sizeof(clt_addr);

while(1)

{

apt_fd = accept(lsn_fd, (struct sockaddr*)&clt_addr, &clt_len);

if(apt_fd < 0)

{

perror("can't listen client connect request");

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 1;

}

printf("received a connection\n");

printf("send message to client\n");

memset(send_buf, 0, 1024);

strcpy(send_buf, "Hello, you have connected to server succeed");

int snd_num = write(apt_fd, send_buf, 1024);

if(snd_num != 1024)

{

perror("send messge to client failed\n");

close(apt_fd);

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 1;

}

//read and printf client info

printf("============info=================\n");

for(i = 0; i < 4; i++)

{

memset(recv_buf, 0, 1024);

int rcv_num = read(apt_fd, recv_buf, sizeof(recv_buf));

printf("Message from client (%d) :%s\n", rcv_num, recv_buf);

}

}

close(apt_fd);

close(lsn_fd);

unlink(UNIX_DOMAIN);

return 0;

}

客户端:

#include

#include

#include

#include

#include

#define UNIX_DOMAIN "/tmp/UNIX.domain"

int main(void)

{

int connect_fd;

struct sockaddr_un srv_addr;

char snd_buf[1024];

char rcv_buf[1024];

int ret;

int i;

//create client socket

connect_fd = socket(PF_UNIX, SOCK_STREAM, 0);

if(connect_fd < 0)

{

perror("client create socket failed");

return 1;

}

//set server sockaddr_un

srv_addr.sun_family = AF_UNIX;

strcpy(srv_addr.sun_path, UNIX_DOMAIN);

//connect to server

ret = connect(connect_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));

if(ret == -1)

{

perror("connect to server failed!");

close(connect_fd);

unlink(UNIX_DOMAIN);

return 1;

}

//receive message from server

memset(rcv_buf, 0, 1024);

int rcv_num = read(connect_fd, rcv_buf, sizeof(rcv_buf));

printf("receive message from server (%d) :%s\n", rcv_num, rcv_buf);

//printf("\n");

//send message to server

memset(snd_buf, 0, 1024);

strcpy(snd_buf, "message from client");

printf("sizeof(snd_buf): %d\n", sizeof(snd_buf));

sleep(2000);

//send message to server

for(i = 0; i < 4; i++)

{

write(connect_fd, snd_buf, sizeof(snd_buf));

}

close(connect_fd);

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven发布到Nexus

1.概述 在本系列的上一篇文章中&#xff0c;我们将Maven设置为Nexus的部署过程 。 在本文中&#xff0c;我们将在项目的pom以及Jenkins作业中使用Maven配置发布过程 。 2. 为了使Maven能够发布到Nexus Repository Server&#xff0c;我们需要通过distributionManagement元素定…

mysql随机查询

select * from table as t1 join (select round(rand() * ((select max(id) from table)-(select min(id) from table))(select min(id) from table)) as id) as t2 where t1.id > t2.id order by t1.id limit 1;;转载于:https://www.cnblogs.com/upup2015/p/7782525.htm…

CSS学习笔记11 CSS背景

background-color&#xff1a;背景色 前面我们经常用background-color这个属性来设置元素的背景色&#xff0c;例如下面这条css可将段落的背景色设置为灰色 p {background-color: gray;} 如果想要元素的背景色向外延伸&#xff0c;则只需增加内边距即可 background-color可以为…

linux 文件的目录,Linux文件及目录管理

第七列&#xff1a;文件或目录名。名以 . 开头表示为隐藏文件或隐藏目录2.2 修改文件目录或者权限改变文件所属用户组&#xff1a;chgrpchgrp [-R] 用户组 文件或目录 ...[-R]&#xff1a;递归修改该目录下所有文件和目录&#xff1b;改变文件所有者&#xff1a;chownchown [-R…

Hbuilder MUI 下拉选择与时间选择器

一、 Hbuilder 下拉选择 <link rel"stylesheet" href"../../../assets/mui/css/mui.picker.min.css" /><script type"text/javascript" src"../../../assets/mui/js/mui.picker.min.js"></script> //引用mui.picker…

套接字(linux相关)

前言&#xff1a;略 一、前因 一切从tcp、udp开始。 众所周知&#xff0c;网络模型一般有两种模型&#xff0c;一种为OSI概念模型&#xff08;七层&#xff09;&#xff0c;另一种为TCP/IP网络模型&#xff08;四层&#xff09;。 TCP/IP应用层对应OSI的应用层、显示层、会话层…

Maven的春天

1.概述 本教程将讨论如何使用Maven设置Spring&#xff0c;并介绍使用Spring依赖项的特定用例。 最新的Spring版本可以在Maven Central上找到。 2.基本的Maven Spring依赖关系 Spring被设计为模块化和灵活的-基本的Spring容器可用于各种场景&#xff0c;而无需包含框架必须提供…

linux查看进程运行日志文件,【Linux】常用指令、ps查看进程、kill杀进程、启动停止tomcat命令、查看日志、查看端口、find查找文件...

1.说出 10 个 linux 常用的指令1) ls 查看目录中的文件2)cd /home 进入 / home 目录&#xff1b;cd .. 返回上一级目录&#xff1b;cd ../.. 返回上两级目录3)mkdir dir1 创建一个叫做 dir1 的目录4)rmdir dir1 删除一个叫做 dir1 的目录 (只能删除空目录)5)rm -f file1 删除一…

页面缓存之Meta http-equiv属性详解

http-equiv顾名思义&#xff0c;相当于http的文件头作用&#xff0c;它可以向浏览器传回一些有用的信息&#xff0c;以帮助正确和精确地显示网页内容&#xff0c;与之对应的属性值为content&#xff0c;content中的内容其实就是各个参数的变量值。 引用 meat标签的http-equiv…

Mysql存储过程详解

Mysql存储过程&#xff1a;1.1 定义&#xff1a;把复杂的操作&#xff0c;封装一个过程。类似于函数。 优点&#xff1a; 1、复杂操作&#xff0c;调用简单。 2、速度快。 缺点&#xff1a; 1、封装复杂。 2、没有灵活性。1.2 查看所有存储过…

E20171106-hm

pulldown adj. 折叠式的; pulldown menu 下拉菜单转载于:https://www.cnblogs.com/lancgg/p/8281683.html

Java PDF库

最近&#xff0c;我有一项任务是选择一些Java PDF库用于PDF生成。 但这不是一个简单的任务。 我想到的第一件事是iText。 众所周知Java库具有良好的声誉。 但是...有一些塞子。 iText 5版是在AGPL许可下发布的。 即&#xff0c;如果我们想在商业产品中使用iText&#xff0c;则必…

linux系统md5sum命令用不了,Linux中md5sum命令起什么作用呢?

摘要:下文讲述Linux中md5sum命令的功能说明&#xff0c;如下所示&#xff1b;md5sum命令功能:用于为一个文件生成其内容的MD5值&#xff0c;此命令的原理是对文件的内容进行校验,生成文件内容的MD5值此方式常用于检测文件是否被篡改(因为内容修改后&#xff0c;其MD5值会发生变…

前端工程师必备的几个实用网站

一、配色类网站 http://colorhunt.co 这个网站给我们提供了很多的配色方案&#xff0c;我们直接使用就OK了。使用方法也很简单&#xff0c;鼠标移动到对应的颜色上&#xff0c;我们就可以看到颜色的十六进制码&#xff0c;复制这个颜色到工具里就可以使用了。 https://webgra…

BZOJ1004 [HNOI2008]Cards 【burnside定理 + 01背包】

题目链接 BZOJ1004 题解 burnside定理 在\(m\)个置换下本质不同的染色方案数&#xff0c;等于每种置换下不变的方案数的平均数 记\(L\)为本质不同的染色方案数&#xff0c;\(m\)为置换数&#xff0c;\(f(i)\)为置换\(i\)下不变的方案数&#xff0c;那么\[L \frac{1}{m}\sum\li…

函数接口– Java 8中java.util.function包中的函数接口

我以前写过有关功能接口及其用法的文章。 如果您正在探索要成为Java 8一部分的API&#xff0c;尤其是那些支持lambda表达式的API&#xff0c;您会发现很少的接口&#xff0c;例如Function&#xff0c;Supplier&#xff0c;Consumer&#xff0c;Predicate和其他接口&#xff0c;…

Gcc静态编译出错

编译命令&#xff1a;gcc -static -o test test.c 出错信息&#xff1a;/usr/bin/ld: cannot find -lccollect2: error: ld returned 1 exit status 原因&解决方法&#xff1a;静态链接需要静态库&#xff0c;系统没有安装静态库导致报错。yum install glibc-static.x86_64…

css之浮动

首先说下什么是浮动&#xff08;float&#xff09;&#xff1a;浮动的框可以向左向右移动&#xff0c;直到他的外边缘碰到包含框或者另一个浮动框为止。 浮动在css样式里面是很重要的&#xff0c;我们一起来看看浮动的特点&#xff1a; 1.脱离标准文档流&#xff08;简称脱标&…

linux 修改jmeter内存溢出,jmeter本机内存溢出如何修改?

websocket连接过程中内存溢出&#xff0c;本机配置的内存最大和最小设置的512&#xff1b;一、后台返回二、结果树返回&#xff1a;Thread Name: 线程组 1-9Sample Start: 2017-09-11 13:59:49 CSTLoad time: 9006Connect Time: 0Latency: 0Size in bytes: 0Sent bytes:0Header…

Monkey写脚本

今天学习使用monkey测试一个应用的登陆&#xff0c;遇到些问题记录下&#xff1a; 先上代码&#xff1a; typeraw events count 1 speed 1.0 start data >>LauncheActivity(com.android.smartmirror,com.android.smartmirror.activities.MainActivity)UserWait(500) //…