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;
}
linux进程socket通信,linux进程间通信--socket套接字 实例代码相关推荐
- java socket分包粘包 代码_分享java中处理socket通信过程中粘包情况的实例代码
本篇文章主要介绍了java中处理socket通信过程中粘包的情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这两天学习了java中处理socket通信过程中粘包的情况,而且很重要,所以,今天添 ...
- linux 服务器间通信,Linux 下的进程间通信:套接字和信号 | Linux 中国
原标题:Linux 下的进程间通信:套接字和信号 | Linux 中国 学习在 Linux 中进程是如何与其他进程进行同步的. -- Marty Kalin 本篇是 Linux 下(IPC)系列的第三 ...
- linux进程的通信文件映射,Linux进程间通信 -- mmap函数的使用
mmap/munmap函数 函数原型 #include void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t ...
- linux篇【12】:网络套接字<前序>—网络基础+udp套接字
目录 一.网络基础 1.认识 "协议" 举例: 2.协议分层 (1)软件分层 (2)协议分层 3.OSI七层模型 4.TCP/IP五层(或四层)模型 5.网络和操作系统之间的关系 ...
- 【Linux网络编程】原始套接字实例:MAC 地址扫描器
如果 A (192.168.1.1 )向 B (192.168.1.2 )发送一个数据包,那么需要的条件有 ip.port.使用的协议(TCP/UDP)之外还需要 MAC 地址,因为在以太网数据包中 ...
- linux串口编程实例_Linux 网络编程——原始套接字实例:发送 UDP 数据包
以太网报文格式: IP 报文格式: UDP 报文格式: 校验和函数: /*******************************************************功能:校验和函数参 ...
- socket bufferedinputstream通信读取不到服务器返回的响应_TCP角度看socket通信过程,socket怎么表示三次握手,四次挥手...
什么是套接字? socket 的中文翻译过来就是"套接字".套接字是什么,它的英文含义:插座. Socket 就像一个电话插座,负责连通两端的电话,进行点对点通信,让电话可以进行通 ...
- Linux 网络编程——原始套接字实例:MAC 地址扫描器
如果 A (192.168.1.1 )向 B (192.168.1.2 )发送一个数据包,那么需要的条件有 ip.port.使用的协议(TCP/UDP)之外还需要 MAC 地址,因为在以太网数据包中 ...
- 【Linux网络编程】原始套接字实例:发送 UDP 数据包
以太网报文格式: 详细的说明,请看<MAC 头部报文分析>. IP 报文格式: 详细的说明,请看<IP 数据报格式详解>. UDP 报文格式: 详细的说明,请看<UDP ...
最新文章
- 模拟整个地球:英伟达Earth-2超级计算机即将上线
- unity3D小小白之雾效
- javascript捕获ocx事件
- python简单可视化聊天界面_如何用Python制作可视化输入界面
- 用aspx开发html5页面,ASP.NET使aspx页面能接受HTML,asp的页面传送的文件-.NET教程,Asp.Net开发...
- Prim最小生成树算法
- 菜鸟关于mvc导出Excel的想法
- C++基础:C++的封装/继承/多态
- word 公式编辑器 键入技巧 | 写数学作业必备速查表
- iOS高阶程序员必修——汇编
- 【扩频通信】第五章 扩频信号解扩和解调
- cad详图怎么画_CAD结构图怎么画?手把手教你CAD结构图的绘制方法
- 挖金矿问题java课程设计_动态规划--国王挖金矿问题
- Office2021版安装出错
- 双非上岸北大计算机,双非二战考研上岸北大汇丰经验贴
- 迅雷虚拟服务器,迅雷离线服务器UA
- git branch -vv
- 【思特奇杯·云上蓝桥-算法训练营】第1周:哥德巴赫分解
- C#毕业设计——基于C#+asp.net+sqlserver的视频点播系统设计与实现(毕业论文+程序源码)——视频点播系统
- RestTemplate请求Could not extract response: no suitable HttpMessageConverter found for response type..
热门文章
- yii mysql 主从_mysql主从同步实践 YII
- 少儿编程100讲轻松学python(九)-python如何判断字符串是否为整数
- C语言程序设计二期末考试,9第二学期期末考试《C语言程序设计》A
- 2020年前端招聘技术概览
- android sqlite批量操作,Android: SQLite批量插入数据的最佳实践
- 富文本编辑器、日期选择器、软件天堂、防止XSS攻击、字体icon、转pdf
- React.js 入门与实战课程思维导图
- 6-1 数组函数练习
- [贝聊科技]网页端「应用跳转」技术实现演变
- CSS的常用属性(二)