[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);
- }
![](/Users/Administrator/AppData/Local/youdao/ynote/images/5CE718AD9A60436FBE3EE372EA7107EB/QQ%E6%88%AA%E5%9B%BE20130828221729.jpg)
[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 表 ...
随机推荐
- 启用跨源请求 (CORS)
https://docs.microsoft.com/zh-cn/aspnet/core/security/cors
- vfork 挂掉的一个问题
在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成ex ...
- 第二篇:呈现内容_第一节:Control呈现
一.Control的呈现过程 在上个章节““生死有序”的控件生命周期”中,我们提到Render是控件开发的主角,但在控件树的“合成模式(Composite)”部分这位主角却缺席了(戏份太多的缘由).哦 ...
- python 安装配置(windows)
在 Windows 上, 安装 Python 有两种选择. ActiveState 制作了一个 Windows 上的 Python 安装程序称为 ActivePython, 它包含了一个完整的 Pyt ...
- 增加一条新记录,同时返回其自增id
方法一.是在Insert或Update触发器中用select来返回需要的字段值.默认情况下,当insert时,触发其insert触发器,它的默认返回值是影响到的行数,语句是:select @@rowc ...
- PHP断点调试工具Xdebug的安装
Xdebug是一个PHP程序调试器,可以用来跟踪,调试和分析PHP程序的运行状况.其实调试PHP还有其他工具比如Zend Debugger,但zend官方不是免费发布的,后来更新为zend Serve ...
- pbr若干概念
pbr基于辐射传输理论,最基本的一个观点是:一切皆光源--任何一个面元既是光能接收器,也是光能发射器. 光通(flux):单位时间内通过某一面积的光能,单位W(瓦特),用表示. 可见,光通其实就是功率 ...
- Eclipse maven问题汇总
在使用eclipse+maven的过程中,遇到一系列问题,先汇总记录如下: 1. 在java工程中,缺少Maven依赖: 这个问题比较棘手,一般都对eclispe的工程结构不是很了解,后来经过长时间的 ...
- php分享三十二:php调试工具
一:phpdbg http://phpdbg.com/
- php分享十八七:mysql基础
mysql操作数据库代码: $link = @mysql_connect('localhost:3306', 'root', 'root') or die(mysql_error()); mysql_ ...