[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 表 ...
随机推荐
- Linux内核同步:自旋锁
linux内核--自旋锁的理解 自旋锁:如果内核配置为SMP系统,自旋锁就按SMP系统上的要求来实现真正的自旋等待,但是对于UP系统,自旋锁仅做抢占和中断操作,没有实现真正的“自旋”.如果配置了CON ...
- Mac OS X各版本号的历史费用和升级关系
Mac OS X各版本号的历史费用和升级关系 OS X 10.6 Snow Leopard 早在2009年10月,Mac OS X10.6雪豹是通过光盘发送.并在英国推出时.费用£25 OS X ...
- 适合移动端与PC端的 CSS Reset - m_base.css
文章来源:http://www.cnblogs.com/HCJJ/p/6399185.html 具体代码 @charset "utf-8"; html { -ms-text-siz ...
- 挖财大牛讲 Springboot工作流程
转 Spring Boot Rock'n'Roll FuqiangWang - fujohnwang AT gmail DOTA com 2015-07-09 1 SpringBoot Intro 2 ...
- python标准库介绍——36 popen2 模块详解
==popen2 模块== ``popen2`` 模块允许你执行外部命令, 并通过流来分别访问它的 ``stdin`` 和 ``stdout`` ( 可能还有 ``stderr`` ). 在 pyth ...
- 转:ECharts图表组件入门教程之Theme:ECharts图表的皮肤是什么?如何给图表换主题(皮肤)Theme?
一.什么是ECharts图表的皮肤(主题)? 针对这个问题我只能这样回答,ECharts图表的主题(皮肤)就犹如人的衣服一样,是用来衬托和渲染主体,使其变得更加美观好看的目的.你去过ECharts图表 ...
- 解决Myeclipse中导入自定义的配色方案后,JSP中的js代码块为白色背景的问题
捣鼓了大半个上午,终于搞定.这样设置就可以了: 点击MyEclipse上方的菜单栏中的window菜单.选择Preferences菜单项.在弹出的窗口的左侧树形菜单依次选择:MyEclipse.Fil ...
- es6Promise及小程序Promise用法
本文主要说一下Promise,Prepending(进行时),Resolve(成功了),Reject(失败了),then在小程序中的实际应用 关于promise的介绍什么的就不说了网上一搜一大堆,这里 ...
- Eclipse maven问题汇总
在使用eclipse+maven的过程中,遇到一系列问题,先汇总记录如下: 1. 在java工程中,缺少Maven依赖: 这个问题比较棘手,一般都对eclispe的工程结构不是很了解,后来经过长时间的 ...
- python 搭建ftp服务器
代码示例: # coding: utf-8 import os from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.han ...