进程间通信系列 之 概述与对比   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. Ubuntu 不支持 rpm

    不是第一次犯这个错误了. 记一下. 每次安装jdk 的时候,习惯性下载rpm包. 然后的,然后在 ubuntu上rpm 安装的时候就跪了.. ubuntu需要使用Alien 把rpm 转成 deb再安 ...

  2. 部署Cloudera Management for centos 7

    hadoop生态圈框架工具甚多,自己整合起来很是繁琐,特别是oozie以及hue结合来实现hive.mr.spark等定时依赖任务更是一步一个坑,为了减少踩坑,只好从apache hadoop,转向C ...

  3. 打印zigzag矩阵

    比较愚蠢但是很好理解的一种方法 public static void printZigzag (int n){ int[][] arr = new int[n][]; //动态创建数组 并初始化 fo ...

  4. NOI全国赛(1998)——围巾裁剪

    裁缝有一块非常珍贵的丝绸围巾.可惜的是,围巾的某些部分已经被蛀虫给咬坏了.裁缝当然不愿意就这么把围巾给丢了,于是,他想把围巾给裁成两块小围巾送给他的两个女儿.自然,两块小围巾的面积之和越大越好.  这 ...

  5. vpn的实现原理

    由于公共IP的短缺,我们在组建局域网时,通常使用保留地址作为内部IP,(比如最常用的C类保留地址:192.168.0.0-192.168.255.255)这些地址是不会被互联网分配的,因此它们在互联网 ...

  6. MVC不用302跳转Action,内部跳转

    原理,在一个Action里面return 另一个Action出去. public class HomeController : Controller { // GET: Home public Act ...

  7. 我的python之路【第二篇】数据类型与方法

    一.Python中有哪些数据类型 整型 在32位的系统中: 取值范围就是-(2^31) 到2^31-1 在64位系统中:   取值范围就是-(2^63) 到2^63-1 浮点型 布尔型 字符型 字符串 ...

  8. Redis应用----消息传递

    1.摘要 消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的.常见的消息传递应用有,新浪微博中的@我呀.给你评论然后的提示呀.赞赞赞提示.私信呀.甚至是发微博分享的新鲜事:知乎中的私 ...

  9. sass ruby环境 安装配置,使用sublime text3 中sass

    首先,你想要使用sass的话,就必须依赖于ruby环境.所以,你要下一个ruby.具体的链接应该是(http://rubyinstaller.org/downloads).下载相应的版本.- 下载好之 ...

  10. Sublime Text前端开发环境配置

    Sublime Text是前端开发不可不说的编辑器,本文以Sublime Text 3为例讲解一下如何搭建前端的开发环境. 下载Sublime Text 3 下载地址 #==> Sublime ...