`

Linux下Socket通信(IPC)

    博客分类:
  • C
 
阅读更多

1、Linux下的Socket通信是一种基于文件的IPC通信,也可以是基于其他设备的IPC通信。它可以在本机内不同进程间实现通信,也可以在实现不同主机之间的通信。

2、Socket是一种进程间通信模式:
对等模式(P2P):一对一:UDP
客户服务器模式(C/S):一对多:TCP

3、基本创建步骤
(1)通过socket()函数创建socket
(2)通过bind函数绑定socket于设备地址
(3)进行读写操作read/recv/recvfrom write/send/sendto
(4)close方法关闭套接字

4、下面是其中用到的一些函数的用法及说明
(1)socket函数
int socket(int domain,int type, int protocol)
domain:地址族 IF_INET与底层内核通信(原生数据包)
type:通信的数据格式
protocol:传递数的含义

通信的数据类型:
SOCK_STREAM:字节流(一对多)
SOCK_DGRAM:字节包(一对一)
SOCK_RAW:硬件层的原生数据包 

通信的协议:
0:默认协议:地址族+数据格式=唯一决定协议
指定协议 IPPROTO_TCP
        IPPROTO_UDP
        IPPROTO_IP
        IPPROTO_ICMP
        IPPROTO_IGMP

(2)bind函数
把socket绑定到一个通信地址
int bind(int sockfd,const struct sockaddr* addr,socklen_t len)
sockfd:绑定地址的socket
addr:地址
len:地址内存长度
返回:成功是0,失败是-1

(3)recvfrom函数
如果想返回数据发送者的地址,则使用recvfrom.
int recvfrom(int fd,
 void *buf,
 size_t len,
 int flag,
 struct sockaddr*addr,//返回数据发送者的地址) ssocklen_t *l);//输入返回地址缓冲长度,返回实际发送者的地址长度

(4)write/send/sendto函数
int sendto(int fd,//发送socket
    const void *buf,//发送的数据
    size_t len,//发送数据的长度
    int flag,//发送数据的方式,建议为0
    const struct sockaddr *addr,//数据        发往的目的地址
    socklen_t l);//地址长度
  返回:
    -1:发送失败
    否则就是发送的字节数。

 

代码如下:

test1.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(void)
{
	//create socket
	int fd = socket(AF_INET, SOCK_DGRAM, 0);
	if(fd==-1)
	{
		perror("socket\n");
		exit(-1);
	}
	printf("socket fd=%d\n",fd);

	//build connection address
	struct sockaddr_in addr;
	addr.sin_family = AF_INET;
	addr.sin_port = htons(6666);
	addr.sin_addr.s_addr = inet_addr("127.0.0.1");

	int r;
	r = bind(fd,(struct sockaddr*)&addr,sizeof(addr));
	if(r==-1)
	{
		perror("bind");
		close(fd);
		exit(-1);
	}
	printf("bind address successful!\n");
	//accept or send message
	char buf[255];
	struct sockaddr_in from;
	socklen_t len;
	len = sizeof(from);
	while(1)
	{
		r = recvfrom(fd,buf,sizeof(buf)-1,0,(struct sockaddr*)&from,&len);
		if(r>0)
		{
			buf[r]=0;
			printf("The message from %s is:%s\n",inet_ntoa(from.sin_addr),buf);
		}
		else
		{
			break;
		}
	}
	//close socket
	close(fd);
	return 0;
}

test2.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(void)
{
	//create socket
	int fd = socket(AF_INET,SOCK_DGRAM,0);
	if(fd==-1)
	{
		perror("socket");
		exit(-1);
	}
	printf("create socket OK!\n");
	//create an send address
	struct sockaddr_in addr={};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(6666);
	addr.sin_addr.s_addr=inet_addr("127.0.0.1");
	//send the message to the specify address
	int r;
	char buf[255];
	while(1)
	{
		r = read(0,buf,sizeof(buf)-1);
		if(r<=0)
			break;
		sendto(fd,buf,r,0,(struct sockaddr*)&addr,sizeof(addr));
	}
	//close socket
	close(fd);
	return 0;
}

 运行结果如下:(先运行test1.o,然后运行test2.o,在test2.c运行后输入内容,在test1.c所在终端中就会显示信息)



 

以下是一些好的博客:http://blog.sina.com.cn/s/blog_48d101870100n7e9.html

  • 大小: 11.5 KB
  • 大小: 15.6 KB
分享到:
评论

相关推荐

    linux C语言 socket通信聊天小程序

    本项目涉及的"Linux C语言 socket通信聊天小程序"是一个基础的网络聊天应用,支持群聊和私聊功能。 首先,我们需要理解什么是Socket。Socket是网络编程的一个接口,它提供了进程间通信(IPC)的能力,特别是在网络...

    linux下socket通信

    在Linux环境下,Socket通信是一种广泛使用的进程间通信(IPC)机制,它允许不同或相同主机上的应用程序通过网络进行数据交换。在给定的文件信息中,我们看到了一个使用Socket实现Android系统上进程间通信的例子。...

    基于嵌入式linux c socket通信

    标题"基于嵌入式Linux c socket通信"表明我们将关注的是在嵌入式环境下的C语言编程,主要涉及网络编程中的socket接口。 首先,我们需要理解什么是socket。Socket是操作系统提供的一种进程间通信(IPC)机制,特别是...

    ipc_socket-2

    在Linux IPC中,socket通信主要分为两种类型:基于文件描述符的Unix Domain Socket(UDS)和基于网络协议的Inet Domain Socket。 **一、Unix Domain Socket** Unix Domain Socket,也称为本地域socket或文件域...

    linux下socket通信(C程序)

    总的来说,Linux下的Socket通信是通过C语言实现网络通信的基础,涉及的知识点包括Socket的创建与绑定、连接与监听、数据的发送与接收,以及相关的错误处理和系统调用。通过对`client.c`, `server.c`, `talker.c`, `...

    Linux进程间通信方式之socket使用实例

    在Linux环境下,套接字提供了灵活且高效的通信机制,支持多种不同的通信协议和数据传输模式。 ##### 1. 套接字的域 - **AF_INET**: 表示Internet协议家族,主要用于IPv4网络通信。它是最常用的域之一,适用于大多数...

    嵌入式linux系统的socket通信程序

    在嵌入式Linux系统中,Socket通信是一种广泛用于设备间数据传输的技术,它基于Berkeley套接字接口,允许应用程序通过网络进行进程间通信(IPC)或者设备间通信。Socket编程涉及多方面的知识,包括网络协议、操作系统...

    linux下socket文件传输

    在Linux系统中,Socket是一种进程间通信(IPC)机制,广泛应用于网络通信,尤其是在文件传输中。本知识点将深入探讨如何在Linux环境下利用基于Socket的TCP连接进行文件传输,这适用于标准的Linux PC以及嵌入式Linux...

    Linux 本地Socket通讯

    在Linux操作系统中,Socket通信是一种广泛使用的进程间通信(IPC,Inter-Process Communication)方式,不仅应用于网络通信,还常用于同一台机器上的本地进程间通信。本篇将深入探讨"Linux 本地Socket通讯"这一主题...

    android_Linux的socket链接.zip

    本文将深入探讨Android与Linux平台下Socket通信的基础知识,包括Socket的工作原理、创建过程、连接步骤以及相关编程实践。 一、Socket工作原理 Socket源自Unix系统,它是一个编程接口(API),允许应用程序通过网络...

    Linux下Socket编程 聊天软件

    在Linux操作系统中,Socket编程是一种实现网络通信的基本方式,它为进程间通信(IPC)提供了接口,同时也广泛应用于客户端和服务器之间的数据交换。本聊天软件是基于Linux Socket编程实现的,尽管目前还不支持用户...

    LINUX 下SOCKET 编程

    在Linux操作系统中,Socket编程是实现网络通信的基础。它提供了一种进程间通信(IPC)机制,使得运行在不同机器上的程序可以通过网络进行数据交换。本文将深入探讨Linux下的Socket编程,尤其是通过C语言实现的相关...

    linux 网络编程 socket通信

    Socket通信是实现这一目标的关键,它提供了进程间通信(IPC)的能力,允许不同计算机上的程序之间进行数据交换。本主题主要涵盖三个方面:socket通信、多线程编程以及同步机制如信号量和线程锁。 1. **Socket通信**...

    Linux 进程通信(IPC)深刻理解

    ### Linux 进程间通信(IPC)深刻理解 ...以上就是Linux下常见的几种进程间通信机制,每种机制都有其特点和适用场景。在实际开发过程中,开发者需要根据具体需求选择合适的IPC机制来构建高效可靠的软件系统。

    linux下socket编程

    本文将深入探讨Linux下的Socket编程,包括网际Socket通信和进程间的Socket通信,并以C语言为编程语言进行实现。 首先,我们要理解什么是Socket。Socket是网络通信中的一个抽象概念,可以看作是两个应用程序之间进行...

    Linux socket跨平台通信

    Socket是一种进程间通信(IPC)机制,它基于Berkeley套接字接口,广泛用于网络编程。在Linux和Windows中,Socket API遵循相同的设计原则,提供了一组函数来创建、连接、监听、接受和发送数据。 1. **创建Socket**:...

    Linux下Socket 多进程多客户端通信

    在Linux操作系统中,Socket编程...总之,Linux下的Socket多进程多客户端通信涉及到了进程创建、并发处理、同步机制、Socket通信以及进程间通信等多个方面。理解并掌握这些知识点,对于构建高效稳定的网络服务至关重要。

    Linux下sokcet聊天进程版

    在Linux操作系统中,Socket是一种强大的通信机制,广泛用于进程间通信(IPC)以及网络通信。本项目"Linux下socket聊天进程版"就是基于这一技术,实现了父子进程间的交互,为学习和理解Linux socket编程提供了实践...

    Linux Socket编程、Linux IO模型、Linux 进程间通信完整用例

    对于系统开发者和管理员,深入理解Linux的Socket编程、IO模型以及进程间通信(IPC)是至关重要的。本资料包提供了三个主要部分的学习资源:`process_comm`涉及进程间通信,`linux_socket`涵盖Socket编程,而`io_mode...

    实战Linux socket编程Linux Socket Programming By Example

    这本书通过实例展示了如何在Linux环境下进行网络通信,涵盖了从基础的socket创建、连接到高级的多线程、多进程并发处理等核心知识点。源代码的提供为读者提供了实践和学习的宝贵材料。 首先,我们要理解什么是...

Global site tag (gtag.js) - Google Analytics