作者:Younger Liu,本作品采用知识共享署名-非商业性使用-相同方式共享
3.0 未本地化版本许可协议
进行许可。

1.    客户端(发送方)

操作流如下:

(1) 使用AF_INET协议簇,创建基于数据报的socket对象;

(2) 发送方不会在程序中显式的绑定自己的IP信息,但系统会帮助完成这一动作,并指定随机的端口信息,所以接收端显示的端口信息并不会每次都一样;

(3) 发送端向接收端的7838端口发送数据,然后退出

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>
#include <stdlib.h>
#include <arpa/inet.h> int main(int argc, char **argv)
{
struct sockaddr_in s_addr;
int sock, addr_len, len;
char buff[128];
if(-1 == (sock = socket(AF_INET, SOCK_DGRAM, 0)))
{
printf("socket");
exit(errno);
}
else
printf("create socket.\n"); s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(7838); if(argv[1])
{
s_addr.sin_addr.s_addr = inet_addr(argv[1]);
}
else
{
printf("input server ip!\n");
exit(0);
}
addr_len = sizeof(s_addr); strcpy(buff,"hello i am here");
len = sendto(sock, buff, strlen(buff),
0, (struct sockaddr *)&s_addr, addr_len);
if(len < 0)
{
printf("\n send error.\n");
return 3;
}
printf("send success.\n\r"); return 0;
}

2.    服务器端(接收方)

操作流如下:

(1) 使用AF_INET协议簇,创建基于数据报的socket对象;

(2) 绑定自己的IP和端口,此端口也是发送方程序向接收端发起连接时指定的接收端端口;

(3) 接收端阻塞式接收发送端数据;

(4) 如果接收到数据,读取数据并处理。

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>
#include <stdlib.h>
#include <arpa/inet.h> int main(int argc, char **argv)
{
struct sockaddr_in s_addr, c_addr;
int sock, len;
socklen_t addr_len;
char buff[128];
if((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
printf("socket");
exit(errno);
}
else
printf("create socket.\n\r"); memset(&s_addr, 0, sizeof(struct sockaddr_in)); s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(7838);
s_addr.sin_addr.s_addr = INADDR_ANY; if((bind(sock,(struct sockaddr *)&s_addr, sizeof(s_addr))) == -1)
{
printf("bind");
exit(errno);
}
else
printf("bind address to socket.\n\r"); addr_len=sizeof(c_addr);
while(1) {
len = recvfrom(sock, buff, sizeof(buff) - 1,
0, (struct sockaddr *)&c_addr, &addr_len);
if(len<0)
{
printf("recvfrom");
exit(errno);
} buff[len]='\0';
printf("recive come from %s:%d message:%s\n\r",
inet_ntoa(c_addr.sin_addr), ntohs(c_addr.sin_port), buff);
} return 0;
}

作者:Younger Liu,本作品采用知识共享署名-非商业性使用-相同方式共享
3.0 未本地化版本许可协议
进行许可。

使用AF_INET实现点对点的通信示例的更多相关文章

  1. NFC应用(三)点对点(P2P)通信

    点对点(P2P)模式允许两个NFC设备之间建立通信链接并交换数据,与读写器.卡模式不一样的就是,P2P模式下数据交互是双向的. P2P遵循ISO18092规范,建立链接后使用NDEF(NFC Data ...

  2. http通信示例Httpclient和HttpServer

    本示例源于为朋友解决一个小问题,数据库到服务器的数据传输,由于本人能力有限,暂时将它理解为从数据库中获取数取表数据,实际上有可能是文件或者其他形式的数据,不过原理都得用流传输, 首先httpclien ...

  3. C#上位机之—WinForm实现串口通信示例

    上位机开发常用到串口通信来控制设备,串口通信的主要参数:COM口,波特率(9600),停止位(One),数据位(8),校验位(None),括号中的是常用值,具体意思我也不太懂,会用能实现功能就行哈哈: ...

  4. [ActionScript 3.0] 两个AIR之间的通信示例LocalConnection

    发送方AIR程序: package { import flash.display.DisplayObjectContainer; import flash.display.Sprite; import ...

  5. lua 中 socket 通信示例

    server.lua #!/usr/bin/lua local socket = require("socket") host, port = "127.0.0.1&qu ...

  6. Java Socket通信示例

    Socket分为ServerSocket和Socket两大类: 其中ServerSocket用于服务器端,可以通过accept方法监听请求,监听到请求后返回Socket: Socket用户具体完成数据 ...

  7. TCP/IP协议 和 如何实现 互联网上点对点的通信

    1.参考:https://www.cnblogs.com/onepixel/p/7092302.html   TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层 和 链路层   http 属 ...

  8. Windows7下驱动开发与调试体系构建——2.R3与R0的通信示例

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 在阅读本节前,建议先阅读<Windows内核安全与驱动开发>第五章内容, ...

  9. 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

随机推荐

  1. python计算文件夹大小(linux du命令 简化版)

    C盘又满了,怎么办?用了一些垃圾清理软件(或者bat脚本),但是还是不理想,那么具体哪些文件夹下面有巨大的文件呢?windows并不能通过详细信息看到每个文件夹的大小(PS:这里所谓的文件夹的大小是指 ...

  2. 一名合格的JAVA程序员需要点亮那些技能树?

    这是从450家企业的招聘信息中统计而来,相对来说还是比较真实的,虽然有些公司的招聘要求万年不变,但还是可以大致反应企业的招聘要求的. 尽管Struts2漏洞频出,但是由于政府.银行以及传统企业遗留项目 ...

  3. (转)python中的*args和**kw到底是个啥。看下面的例子就会懂了

    先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '----------- ...

  4. 服务器证书安装配置指南(SLB)

    一.生成证书请求  1.下载CSR生成工具 您需要使用CSR生成工具来创建证书请求.  下载AutoCSR: http://www.itrus.cn/soft/autocsr.rar  2.生成服务器 ...

  5. Akamai在内容分发网络中的算法研究(翻译总结)

    作者 | 钱坤 钱坤,腾讯后台开发工程师,从事领域为流媒体CDN相关,参与腾讯TVideo平台开发维护. 原文是<Algorithmic Nuggets in Content Delivery& ...

  6. 模式识别与机器学习—bagging与boosting

    声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验. (1)在介绍Bagging和Boosting算法之前,首先要简 ...

  7. css2.1实现圆角边框

    虽然css3的border-radius实现圆角很简单,但是我还是认为css2.1中好多技术还是很值得学习的,我也是后来才知道这就是传说中的滑动门技术.脑洞大开啊 附上demo <!DOCTYP ...

  8. SQL Server 给表和字段添加说明

    .添加表说明 EXECUTE sp_addextendedproperty N'MS_Description','表说明',N'user',N'dbo',N'table',N'表名',NULL,NUL ...

  9. Object-C知识点

    Object-C常用的知识点,以下为我在实际开发中用到的知识点,但是又想不起来,需要百度一下的知识点 1. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: ...

  10. adobe edge animate 和 adobe animate cc 有啥区别?

    经常有人问这两款软件的区别,每次都要打字好烦,特此总结发帖如下: 一.首先各自软件介绍 ①adobe edge animate 是adobe公司早期推出的一款网页互动工具.通过HTML+CSS+Jav ...