进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685

 进程间通信系列 之 共享内存及其实例   http://blog.csdn.net/younger_china/article/details/15961557

 进程间通信系列 之 共享内存简单实例   http://blog.csdn.net/younger_china/article/details/15991081

 进程间通信系列 之 信号(理论)   http://blog.csdn.net/younger_china/article/details/15976961

 进程间通信系列 之 信号实例   http://blog.csdn.net/younger_china/article/details/15968715

 进程间通信系列 之 信号综合实例   http://blog.csdn.net/younger_china/article/details/15980485

 进程间通信系列 之 命名管道FIFO及其应用实例   http://blog.csdn.net/younger_china/article/details/15808531

 进程间通信系列 之 管道(客户端和服务端通信)   http://blog.csdn.net/younger_china/article/details/15809281

 进程间通信系列 之 信号量详解及编程实例   http://blog.csdn.net/younger_china/article/details/15808531

 进程间通信系列 之 消息队列函数及其范例   http://blog.csdn.net/younger_china/article/details/15503871

 进程间通信系列 之 消息队列应用实例   http://blog.csdn.net/younger_china/article/details/15808501 

 进程间通信系列 之 socket套接字及其实例   http://blog.csdn.net/younger_china/article/details/15809163

 进程间通信系列 之 socket套接字实例   http://blog.csdn.net/younger_china/article/details/15809207

原文来自:http://blog.chinaunix.net/uid-26790551-id-3171897.html

服务器端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#define UNIX_DOMAIN "/tmp/UNIX.domain" int main(void)
{
int lsn_fd, apt_fd;
struct sockaddr_un srv_addr;
struct sockaddr_un clt_addr;
socklen_t clt_len;
int ret;
int i;
char recv_buf[1024];
char send_buf[1024]; //create socket to bind local IP and PORT
lsn_fd = socket(PF_UNIX, SOCK_STREAM, 0);
if(lsn_fd < 0)
{
perror("can't create communication socket!");
return 1;
} //create local IP and PORT
srv_addr.sun_family = AF_UNIX;
strncpy(srv_addr.sun_path, UNIX_DOMAIN, sizeof(srv_addr.sun_path) - 1);
unlink(UNIX_DOMAIN); //bind sockfd and sockaddr
ret = bind(lsn_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));
if(ret == -1)
{
perror("can't bind local sockaddr!");
close(lsn_fd);
unlink(UNIX_DOMAIN);
return 1;
} //listen lsn_fd, try listen 1
ret = listen(lsn_fd, 1);
if(ret == -1)
{
perror("can't listen client connect request");
close(lsn_fd);
unlink(UNIX_DOMAIN);
return 1;
} clt_len = sizeof(clt_addr);
while(1)
{
apt_fd = accept(lsn_fd, (struct sockaddr*)&clt_addr, &clt_len);
if(apt_fd < 0)
{
perror("can't listen client connect request");
close(lsn_fd);
unlink(UNIX_DOMAIN);
return 1;
} printf("received a connection\n");
printf("send message to client\n");
memset(send_buf, 0, 1024);
strcpy(send_buf, "Hello, you have connected to server succeed"); int snd_num = write(apt_fd, send_buf, 1024);
if(snd_num != 1024)
{
perror("send messge to client failed\n");
close(apt_fd);
close(lsn_fd);
unlink(UNIX_DOMAIN);
return 1;
}
//read and printf client info
printf("============info=================\n");
for(i = 0; i < 4; i++)
{
memset(recv_buf, 0, 1024);
int rcv_num = read(apt_fd, recv_buf, sizeof(recv_buf));
printf("Message from client (%d) :%s\n", rcv_num, recv_buf);
}
}
close(apt_fd);
close(lsn_fd);
unlink(UNIX_DOMAIN);
return 0;
}

客户端:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#define UNIX_DOMAIN "/tmp/UNIX.domain" int main(void)
{
int connect_fd;
struct sockaddr_un srv_addr;
char snd_buf[1024];
char rcv_buf[1024];
int ret;
int i; //create client socket
connect_fd = socket(PF_UNIX, SOCK_STREAM, 0);
if(connect_fd < 0)
{
perror("client create socket failed");
return 1;
} //set server sockaddr_un
srv_addr.sun_family = AF_UNIX;
strcpy(srv_addr.sun_path, UNIX_DOMAIN); //connect to server
ret = connect(connect_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));
if(ret == -1)
{
perror("connect to server failed!");
close(connect_fd);
unlink(UNIX_DOMAIN);
return 1;
} //receive message from server
memset(rcv_buf, 0, 1024);
int rcv_num = read(connect_fd, rcv_buf, sizeof(rcv_buf));
printf("receive message from server (%d) :%s\n", rcv_num, rcv_buf);
//printf("\n"); //send message to server
memset(snd_buf, 0, 1024);
strcpy(snd_buf, "message from client");
printf("sizeof(snd_buf): %d\n", sizeof(snd_buf));
sleep(2000); //send message to server
for(i = 0; i < 4; i++)
{
write(connect_fd, snd_buf, sizeof(snd_buf));
}
close(connect_fd);
return 0;
}


进程间通信系列 之 socket套接字实例的更多相关文章

  1. 进程间通信系列 之 socket套接字及其实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  2. 网络编程基础之Socket套接字

    一.Socket介绍 1.什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族 ...

  3. socket套接字TCP API

    socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点.或称之为句柄.IP地址+port号就能够唯一确定一个so ...

  4. Python Web学习笔记之socket套接字

    套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了建立通信通道,网络通信 ...

  5. 19 网络编程--Socket 套接字方法

    1.Socket(也称套接字)介绍 socket这个东东干的事情,就是帮你把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装好了 ,你只需要调用几行代码,就可以给别的机器发消息 ...

  6. 19、网络编程 (Socket套接字编程)

    网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用层.传输层.网络层和链路层,每层分别负责不同的通信功能,接下来针对这四层进行详细地讲解. 链路层:链路层是用于定义物理传输通道,通常是对某些 ...

  7. 31_网络编程(Socket套接字编程)_讲义

    今日内容介绍 1.网络三要素及传输协议 2.实现UDP协议的发送端和接收端 3.实现TCP协议的客户端和服务器 4.TCP上传文件案例 01网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用 ...

  8. Python开发基础-Day23try异常处理、socket套接字基础1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

  9. python基础之try异常处理、socket套接字基础part1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

随机推荐

  1. Python中闭包、装饰器的概念

    1.闭包(Closure)的概念: 内部函数中对enclosing作用域的变量进行引用 1 passline = 60 2 def func(val): 3 print('%x' % id(val)) ...

  2. js 的DOM操作 2017-03-21

    DOM(document object model) 文档对象模型 BOM(browse object model) 针对浏览器(如:弹出的窗口,滚动条等) 一.操作对象(注意大小写:注意elemen ...

  3. SpringMVC中重定向底层原理

      只要将数据放入model中, 也能取到值,原因是model临时放入session域中,当从定向到另一个url时,底层把数据拼接在url地址后面(重定向一定是get请求方式),同时将session域 ...

  4. mac环境下安装xampp

    首先下载XAMPP,然后配置虚拟域名hosts,再配置Apache服务, 配置Apache服务 1.打开/Applications/XAMPP/xamppfiles/etc/httpd.conf文件, ...

  5. 如何给sublime text3安装汉化包?so easy 哦

    这是我本人亲身测试过的,肯定有效,没用的话怪我咯. 首先安装package control,然后安装汉化包即可,很简单哦!!! 1.安装package control:打开sublime,使用快捷键: ...

  6. git 入门宝典

    本篇教程是按照我自己的组织方式,然后从多篇教程中拼凑出来的,嘎嘎~,真佩服自己的技术! 原本想叫 git 宝典的,结果一查git的命令大全,还有那么多的git命令与功能没有接触到,所以...还是谦虚一 ...

  7. 模拟jquery链式访问

    一直写代码写代码,博客都快荒废了,眼看一月要过完,不能不留下点记忆,嘿嘿,刚研究了下jquery的链式访问,这么好用的技能我赶紧get了下,研究后略微修改,模拟一个简单的链式访问,下面这段代码支持修改 ...

  8. 浅谈C10K问题

    在大型的APP中进行高并发的访问,淘宝,支付宝,微信,QQ,等 C10K问题:高并发的进行访问 C10K问题的最大特点是:设计不够良好的程序,其性能和连接数及机器性能的关系往往 是非线性的.举个例子: ...

  9. 关于ng的路由的几点想法(ui-view)

    在配置路由的时候,我们可以选择ng框架自带的路由,也可以使用第三方路由插件ui-router 注意: (1)在使用angular-ui-router的时候,必须先引入angular-ui-router ...

  10. 老李分享:《Linux Shell脚本攻略》 要点(七)

    老李分享:<Linux Shell脚本攻略> 要点(七)   1.显示给定文件夹下的文件的磁盘适用情况 [root@localhost program_test]# du -a -h ./ ...