消息队列是可以实现没有共同关系的进程之间的通信。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. js之广告弹出自动关闭

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  2. javascript 小代码

    if(!("a" in window)){ var a =1; } alert(a); //undefined var a = 1,b=function a (x){ x & ...

  3. BZOJ5196: [Usaco2018 Feb]Taming the Herd(DP暴力)

    5196: [Usaco2018 Feb]Taming the Herd Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 78  Solved: 71[ ...

  4. 每天一个linux命令(文件操作):【转载】which命令

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:        which  查看可执行文件的位置.       whereis 查看文件的位置.         ...

  5. Codeforces 1030D 【构造】

    LINK 题目大意:给你n,m,k,让你在一个n*m的点阵里构造出一个面积为\(\frac{n*m}{k}\)的三角形 思路 首先要有一个结论是整点三角形的面积分母最多为2,然后就可以判断不存在的情况 ...

  6. UI 设计中的视觉无障碍设计

    我给博客改了主题色,从 这样的 改成了 这样的:然而我问小伙伴看看效果他却并没有发现改变. 红绿色盲在亚洲人中占比,男性约 5%,女性则小得多.也就是说,就算仅考虑为国内用户开发应用,这也是很大的一部 ...

  7. ios 视图切换翻页效果

    本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar  Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: ...

  8. P2P UPD打洞原理

    转自:http://blog.pfan.cn/fengfei/18828.html 首先先介绍一些基本概念:            NAT(Network Address             Tr ...

  9. iPhone4s 9.2.1安装cydia(越狱)

    依据网上资料而来 主要就是上图视频中的6步骤选项,不要选错. 1.prepare for jailbreak 2.选择Accept 3. proceed with jailbreak 4.begin ...

  10. 服务器上通过FTP共享文件夹

    近日,公司某服务器共同操作的人员增多,而我只需访问及替换某些文件,故想到共享文件夹. 在IIS中建立ftp站点,添加虚拟目录(可多个,对应不同文件夹),设置允许访问的用户(添加用户,见在IIS上搭建F ...