[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 表 ...
随机推荐
- Office 2010 安装程序包的语言不受系统支持
主要看了这篇文章之后让我有了处理思路. 最后我直接用压缩文件进行安装,没有时行解压.这样就不会出现找不到什么文件的问题了.所以语言不受系统支持问题也就解决了. 原文内容: 前几天,有位好友跟我说他的 ...
- PHP断点调试工具Xdebug的安装
Xdebug是一个PHP程序调试器,可以用来跟踪,调试和分析PHP程序的运行状况.其实调试PHP还有其他工具比如Zend Debugger,但zend官方不是免费发布的,后来更新为zend Serve ...
- linux(centos6)搭建ftp服务器 -摘自网络
前提 ssh服务已经开启,关闭防火墙,主机和虚拟机能ping通 查看ssh和防火墙的状态 service sshd status service iptables status 开启ssh服务 ser ...
- logstash匹配多行日志
在工作中,遇到一个问题就是日志的处理,首选的方案就是ELFK(filebeat+logstash+es+kibana) 因为之前使用过logstash采集日志的时候,非常的消耗系统的资源,所以这里我选 ...
- c# vs2010 excel 上传oracle数据
excel 数据表上传到oracle数据库.过程例如以下: 1.打开本地excel文件 2.用OleDb连接excel文件 3.将来excel的数据读取到dataset中 4.把dataset 中数据 ...
- 标准差(Standard Deviation) 和 标准误差(Standard Error)
本文摘自 Streiner DL.Maintaining standards: differences between the standard deviation and standarderror ...
- SerDes、RocketIO、GTX
1.SerDes:serdes = serial and deserial,就是组串器与解串器,也就是通用的高速IO. GTX,GTP,GTH等都是SERDES,只是速率不一样,XILINX叫其不同的 ...
- 深入理解Linux内核-内存管理
内核如果给自己分配动态内存 动态内存:RAM的某些部分被永久打分配给内核,用来存放内核代码以及静态内核数据结构:剩余的部分被称为动态内存 连续物理内存区管理: 页框管理:1.页大小的选择,通常情况下主 ...
- Java 8 – 日期和时间实用技巧
当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数.或者使用Date类来操作日期:当遇到加 ...
- HTML5学习笔记(二):HTML基础学习之一
元素.属性和格式化 元素是指开始标签到结束标签之前的所有代码,如: <p>this is my page!</p> <!-- 下面的可以称为空元素 --> < ...