Linux进程间通信——使用流套接字
- 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);
- <span style="white-space:pre"> </span>//设置服务器接收的连接地址和监听的端口
- 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);
- }
- }
- }
- #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);
- }

Linux进程间通信——使用流套接字的更多相关文章
- Linux进程间通信——使用数据报套接字
前一篇文章, Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报 ...
- IPC——流套接字通信
Linux进程间通信——使用流套接字 前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进 ...
- Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...
- Linux网络编程之套接字基础
1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_family; /* addre ...
- Linux学习笔记30——套接字
一 什么是套接字 套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发既可以在本地单机上进行,也可以跨网络进行. 二 套接字属性 套接字的特性由3个属性确定,它们是:域,类型和协议 1 套接 ...
- Linux网络编程——原始套接字实例:MAC 头部报文分析
通过<Linux网络编程——原始套接字编程>得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? 链路层封包格式 M ...
- linux 进程通信 :流套接字
消息队列是可以实现没有共同关系的进程之间的通信.Socket则可以实现不同计算机的不同进程之间的通信. //地址的结构体 struct sockaddr_in{ short int sin_famil ...
- Linux网络通信(TCP套接字编写,多进程多线程版本)
预备知识 源IP地址和目的IP地址 IP地址在上一篇博客中也介绍过,它是用来标识网络中不同主机的地址.两台主机进行通信时,发送方需要知道自己往哪一台主机发送,这就需要知道接受方主机的的IP地址,也就是 ...
- [linux basic基础]----套接字
套接字是一种通信机制,凭借这种机制client/server系统的开发者既可以在本地机器上进行,也可以跨网络进行. 1,服务器应用程序用系统调用socket来创建一个套接字,他是系统分配给服务器进程的 ...
随机推荐
- C指针数组
#include<stdio.h> #include<stdlib.h> int main(void) { char const *str[] = { "this i ...
- zend支持sql server
1.修改Zend下Db下Adapter下Pdo下Abstract.php中的connect方法 protected function _connect() { // if we already hav ...
- cf478B Random Teams
B. Random Teams time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- hdu 1987-How many ways(dp)
解析:假设机器人在(x,y)这个点,能量为power,那么可以到达它右下角曼哈顿距离小于等于power的地方,再以该点为起点继续搜索. 代码如下: #include<cstdio> #in ...
- Android - 使用Intent来启动Activity
本文地址: http://blog.csdn.net/caroline_wendy/article/details/21455141 Intent 的用途是 绑定 应用程序组件, 并在应用程序之间进行 ...
- 【求出所有最短路+最小割】【多校第一场】【G题】
题意 A从1要追在N的 B 只能走最短的路 问B最少切断多少条路可以让A不能过来 问B最多切断多少条路A还是能过来 对于1 求出1到N的所有最短路的路径,对其求最小割 对于2 求出长度最小的最短路即可 ...
- 【中途相遇+二进制】【NEERC 2003】Jurassic Remains
例题25 侏罗纪(Jurassic Remains, NEERC 2003, LA 2965) 给定n个大写字母组成的字符串.选择尽量多的串,使得每个大写字母都能出现偶数次. [输入格式] 输入包含 ...
- Java - 泛型 ( Generic )
Java - 泛型 ( Generic ) > 泛型的特点 > 解决元素存储的安全性问题 > 解决获取数据元素时,需要类型强转的问题 ...
- SQL Server2008R2安装失败问题之语言包问题
今天安装SQL Server2008 的时候出现了,如下的的问题,安装过程在ExcuteStandardTimingsWorkflow时候报错,结束安装. 提示: ...
- Android应用自动更新功能的实现!!!
自动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比如,提示语:最新版本的url等).然后我们给出提示框,用 ...