消息队列是可以实现没有共同关系的进程之间的通信。Socket则可以实现不同计算机的不同进程之间的通信。

//地址的结构体
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;
};

几个重要的函数:

//创建socket
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 <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h> int main(){ int sockfd = -;
struct sockaddr_in address; //创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, ); //对地址结构体赋值
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(); //连接服务器的时候 要把套接字和地址结构传进去
connect(sockfd, (struct sockaddr*)&address, sizeof(address)); printf("Connect OK!\n"); printf("Enter a string\n"); char buffer[];
memset(buffer,'\0',); fgets(buffer,,stdin); //socketfd的用处在这里,通过write和read来读写数据 write(sockfd,buffer,); memset(buffer,'\0',); read(sockfd,buffer,); printf("%s\n",buffer); close(sockfd); }

服务端代码:

#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 = -;
int client_sockfd = -; struct sockaddr_in server_addr;
struct sockaddr_in client_addr; server_sockfd = socket(AF_INET, SOCK_STREAM, );
//internet stream protocol server_addr.sin_family = AF_INET;
//接收任何地址
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(); //绑定才能被别人找到
bind(server_sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); //创建队列
listen(server_sockfd, ); //create end while(){ printf("Server start!\n"); char buffer[];
memset(buffer,'\0',); int client_len = sizeof(client_addr); //接收成功会返回客户的文件描述符 把客户的地址信息填到client_addr里面
client_sockfd = accept(server_sockfd, (struct sockaddr*)&client_addr, &client_len); //调用子进程来处理
if(fork()==){ //in child process read(client_sockfd,buffer,); printf("client:\n");
printf("%ld\n",client_addr.sin_addr.s_addr);
printf("%d\n",client_addr.sin_port);
printf("Message:%s\n",buffer); write(client_sockfd,"Get Message\n",); close(client_sockfd); }
else{ close(client_sockfd); } } }

linux 进程通信 :流套接字的更多相关文章

  1. Linux进程间通信——使用流套接字

    前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...

  2. IPC——流套接字通信

    Linux进程间通信——使用流套接字 前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进 ...

  3. Linux进程间通信——使用数据报套接字

    前一篇文章, Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报 ...

  4. Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()

    前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...

  5. Linux网络通信(TCP套接字编写,多进程多线程版本)

    预备知识 源IP地址和目的IP地址 IP地址在上一篇博客中也介绍过,它是用来标识网络中不同主机的地址.两台主机进行通信时,发送方需要知道自己往哪一台主机发送,这就需要知道接受方主机的的IP地址,也就是 ...

  6. [linux basic基础]----套接字

    套接字是一种通信机制,凭借这种机制client/server系统的开发者既可以在本地机器上进行,也可以跨网络进行. 1,服务器应用程序用系统调用socket来创建一个套接字,他是系统分配给服务器进程的 ...

  7. Linux学习笔记30——套接字

    一 什么是套接字 套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发既可以在本地单机上进行,也可以跨网络进行. 二 套接字属性 套接字的特性由3个属性确定,它们是:域,类型和协议   1 套接 ...

  8. Linux网络编程之套接字基础

    1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_family; /* addre ...

  9. unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL - 用于本地内部进程通讯的套接字。

    SYNOPSIS(总览) #include <sys/socket.h> #include <sys/un.h> unix_socket = socket(PF_UNIX, t ...

  10. Linux进程通信----匿名管道

    Linux进程通信中最为简单的方式是匿名管道 匿名管道的创建需要用到pipe函数,pipe函数参数为一个数组表示的文件描述字.这个数组有两个文件描 述字,第一个是用于读数据的文件描述符第二个是用于写数 ...

随机推荐

  1. libcurl使用认证证书 https认证

    在server.xml中增加下面的内容: ciphers="SSL_RSA_WITH_RC4_128_SHA" 下面是libcurl 的测试代码: #include <std ...

  2. windows上安装Gradle并配置环境变量

    安装Gradle 下载Gradle,然后配置运行环境就可以了,有一点要注意的是gradle使用的是Groovy语言,而这个语言依赖于java,因此你必须安装配置java环境. 首先下载gradle,我 ...

  3. Web应用中使用JavaMail发送邮件进行用户注册

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  4. BZOJ2160 拉拉队排练【Manacher】

    Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...

  5. eclipse 无用代码扫描工具UCDetector

    本文主要介绍UCDetector(无用代码扫描工具)使用方法及局限 对于沉积或多方接手开发的项目经常会遇到一坨一坨无用的代码,但一个一个类查找又相当费时,这里介绍一个eclipse插件扫描没有引用的类 ...

  6. nginx+uwsgi 和nginx+gunicorn区别、如何部署

    [线上环境部署Django,nginx+uwsgi 和nginx+gunicorn,这两种方案,应该如何选择?] 大家是采用的何种部署方式? 第一种,高并发稳定一点 我们公司使用的是nginx+gun ...

  7. sentry docker-compsoe 安装以及简单使用

    1. 准备环境 docker docker-compose     2. 安装 a. docker-compose git clone git clone https://github.com/get ...

  8. UML中的几种关系(UML Relationships)

    依赖(Dependency) 依赖可以理解为一个类A使用到了另一个类B,而这种使用关系是具有偶然性的.临时性的.非常弱的,但是B类的变化会影响到A:比如某人要过河,需要借用一条船,此时人与船之间的关系 ...

  9. openOffice转换的时候乱码在linux下使用openOffice的时候发现在转换后出现了乱码

    openOffice转换的时候乱码 在linux下使用openOffice的时候发现在转换后出现了乱码,最后上网查了一下,按照网上的说法去试了试,最后也没有解决,也可能是我这边的linux的权限问题, ...

  10. Redis持久化的简单介绍

    Redis的强大功能很大程度上是由于其将所有数据都存储在内存中,为了使Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式持久化到硬盘中. Redis支持两种方式的持久化,一种是RDB方 ...