[Socket]Socket进程间的通信
转自:http://blog.csdn.net/giantpoplar/article/details/47657303
- struct sockaddr_un{
- sa_family_t sun_family;//AF_UNIX,它是一个短整型
- char sum_path[];//路径名
- };
- struct sockaddr_in{
- short int sin_family;//AF_INET
- unsigned short int sin_port;//端口号
- struct in_addr sin_addr;//IP地址
- };
- struct in_addr{
- unsigned long int s_addr;
- };
- int socket(int domain, int type, int protocol);
- int bind( int socket, const struct sockaddr *address, size_t address_len);
- int listen(int socket, int backlog);
- int accept(int socket, struct sockaddr *address, size_t *address_len);
- int connect(int socket, const struct sockaddr *address, size_t address_len);
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <signal.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int server_sockfd = -1;
- int client_sockfd = -1;
- int client_len = 0;
- struct sockaddr_in server_addr;
- struct sockaddr_in client_addr;
- //创建流套接字
- server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
- //设置服务器接收的连接地址和监听的端口
- server_addr.sin_family = AF_INET;//指定网络套接字
- server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//接受所有IP地址的连接
- server_addr.sin_port = htons(9736);//绑定到9736端口
- //绑定(命名)套接字
- bind(server_sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
- //创建套接字队列,监听套接字
- listen(server_sockfd, 5);
- //忽略子进程停止或退出信号
- signal(SIGCHLD, SIG_IGN);
- while(1)
- {
- char ch = '\0';
- client_len = sizeof(client_addr);
- printf("Server waiting\n");
- //接受连接,创建新的套接字
- client_sockfd = accept(server_sockfd, (struct sockaddr*)&client_addr, &client_len);
- if(fork() == 0)
- {
- //子进程中,读取客户端发过来的信息,处理信息,再发送给客户端
- read(client_sockfd, &ch, 1);
- sleep(5);
- ch++;
- write(client_sockfd, &ch, 1);
- close(client_sockfd);
- exit(0);
- }
- else
- {
- //父进程中,关闭套接字
- close(client_sockfd);
- }
- }
- }
客户sockclient.c的源代码如下:
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int sockfd = -1;
- int len = 0;
- struct sockaddr_in address;
- int result;
- char ch = 'A';
- //创建流套接字
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- //设置要连接的服务器的信息
- address.sin_family = AF_INET;//使用网络套接字
- address.sin_addr.s_addr = inet_addr("127.0.0.1");//服务器地址
- address.sin_port = htons(9736);//服务器所监听的端口
- len = sizeof(address);
- //连接到服务器
- result = connect(sockfd, (struct sockaddr*)&address, len);
- if(result == -1)
- {
- perror("ops:client\n");
- exit(1);
- }
- //发送请求给服务器
- write(sockfd, &ch, 1);
- //从服务器获取数据
- read(sockfd, &ch, 1);
- printf("char form server = %c\n", ch);
- close(sockfd);
- exit(0);
- }

[Socket]Socket进程间的通信的更多相关文章
- 进程间的通信—套接字(socket)
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网 ...
- Linux进程间的通信
一.管道 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: A. 管道是半双工的,数据只能向一个方向流动: B. 需要双工通信时,需要建立起两个管道: C. 只能用于父子进程或者兄弟 ...
- c++ 网络编程(三) LINUX/windows 进程间的通信原理与实现代码 基于多进程的服务端实现
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613027.html 锲子:进程与线程是什么,他们的区别在哪里: 1 进程概念 进程是程序的一 ...
- PHP与Linux进程间的通信
进程间通信预计是公司考察应届毕业生的必考点(嵌入式行业).当然非常多公司考的是算法. 不查阅资料,我脑子里能想到的 [1] 管道, (有名.无名) [2] 父子进程 [3] System V (消息队 ...
- 多任务-python实现-使用队列完成进程间的通信(2.1.8)
@ 目录 1.为什么要使用队列 2.python代码实现 1.为什么要使用队列 进程之间是互相独立的,而线程能够共享全局变量 所以如果进程间想要交换数据的话 只有通过进程间的通信,比如socket.太 ...
- c 进程间的通信
在上篇讲解了如何创建和调用进程 c 进程和系统调用 这篇文章就专门讲讲进程通信的问题 先来看一段下边的代码,这段代码的作用是根据关键字调用一个Python程序来检索RSS源,然后打开那个URL #in ...
- Android进程间的通信之AIDL
Android服务被设计用来执行很多操作,比如说,可以执行运行时间长的耗时操作,比较耗时的网络操作,甚至是在一个单独进程中的永不会结束的操作.实现这些操作之一是通过Android接口定义语言(AIDL ...
- Android进程间的通信之Messenger
Android进程间的通信方式可以通过以下两种方式完成: Android接口定义语言(AIDL) 使用Messenger绑定服务 本文我们将学习使用Messenger绑定服务的方式进行进程间的通信. ...
- Unix系统中,两个进程间的通信
进程之间通常需要进行数据的传输或者共享资源等,因此进程间需要通讯. 可以通过管道,信号,消息队列,共享内存,信号量和套接字等方式 FIFO表示命名管道,这种管道的操作是基于先进先出原理. PIPE 表 ...
随机推荐
- cassandra java 兼容性问题及其解决方法
1.安装 http://wiki.apache.org/cassandra/DebianPackaging 2.java兼容性问题 由于cassandra运行于sun jdk6上,而ubuntu默认是 ...
- sql 置顶功能的查询
sql中有置顶的需求,文章很多条,分页查询,要求置顶的在最前面: 只需要使用: order by 置顶字段 即可
- 学习笔记之 curl 命令用法详解
[前言] 本文翻译和整理自 Linux-2.6.32 中和 curl 相关的 Manual Page 描述文档. 文档目的仅在提醒读者所遗忘的知识点,故在整理时削弱了阅读流畅性,适用于对 cu ...
- Android 数据分析系列一:sharedPreferences
Android数据存储方式,包括下面四种: 1. Shared Preferences:用来存储"key-value"paires格式的数据,它是一个轻量级的键值存储机制,只可以存 ...
- ElasticSearch 数据增删改实现
前言 本文介绍 ElasticSearch 增加.删除.修改数据的使用示例.通过Restful 接口和 Python 实现.ES最新版本中有Delete By Query 和 Update By Qu ...
- Matlab 2016b 正式版下载
Matlab 2016b 正式版下载 这两天为完成最优化大作业,zyy又开始鼓捣matlab了.之前我装的是matlab 2013a,发现不支持求解整数规划,遂更新了一下. 下载地址 链接:http ...
- HBase中多Filter查询示例
在Hbase查询中有时需要用到多个Filter关联的查询. 代码如下: ArrayList<Filter> listForFilters = new ArrayList<Filter ...
- Oracle多表关联如何更新多个字段
注意点:1.被update主表一定要加上过滤条件.2.查询出来更新结果集,同时也要作为被更新主表的条件,作为同步大家都是更新这部分数据.update student stu set (stu.name ...
- Android应用的基本原理
原文:http://android.eoe.cn/topic/android_sdk 应用基础-Application Fundamentals Android应用程序以java作为开发语言.用And ...
- 开源企业IM-免费企业即时通讯-ENTBOOST V2014.180 Windows版本号正式公布
ENTBOOST,VERSION 2014.180 Linux版本号公布,主要添加企业IM应用集成功能,完好安卓SDK功能及部分BUG修正. 下一版本号公布时间.7月15日.敬请关注. ENTBOOS ...