使用AF_INET实现点对点的通信示例
作者: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实现点对点的通信示例的更多相关文章
- NFC应用(三)点对点(P2P)通信
点对点(P2P)模式允许两个NFC设备之间建立通信链接并交换数据,与读写器.卡模式不一样的就是,P2P模式下数据交互是双向的. P2P遵循ISO18092规范,建立链接后使用NDEF(NFC Data ...
- http通信示例Httpclient和HttpServer
本示例源于为朋友解决一个小问题,数据库到服务器的数据传输,由于本人能力有限,暂时将它理解为从数据库中获取数取表数据,实际上有可能是文件或者其他形式的数据,不过原理都得用流传输, 首先httpclien ...
- C#上位机之—WinForm实现串口通信示例
上位机开发常用到串口通信来控制设备,串口通信的主要参数:COM口,波特率(9600),停止位(One),数据位(8),校验位(None),括号中的是常用值,具体意思我也不太懂,会用能实现功能就行哈哈: ...
- [ActionScript 3.0] 两个AIR之间的通信示例LocalConnection
发送方AIR程序: package { import flash.display.DisplayObjectContainer; import flash.display.Sprite; import ...
- lua 中 socket 通信示例
server.lua #!/usr/bin/lua local socket = require("socket") host, port = "127.0.0.1&qu ...
- Java Socket通信示例
Socket分为ServerSocket和Socket两大类: 其中ServerSocket用于服务器端,可以通过accept方法监听请求,监听到请求后返回Socket: Socket用户具体完成数据 ...
- TCP/IP协议 和 如何实现 互联网上点对点的通信
1.参考:https://www.cnblogs.com/onepixel/p/7092302.html TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层 和 链路层 http 属 ...
- Windows7下驱动开发与调试体系构建——2.R3与R0的通信示例
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 在阅读本节前,建议先阅读<Windows内核安全与驱动开发>第五章内容, ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
随机推荐
- python计算文件夹大小(linux du命令 简化版)
C盘又满了,怎么办?用了一些垃圾清理软件(或者bat脚本),但是还是不理想,那么具体哪些文件夹下面有巨大的文件呢?windows并不能通过详细信息看到每个文件夹的大小(PS:这里所谓的文件夹的大小是指 ...
- 一名合格的JAVA程序员需要点亮那些技能树?
这是从450家企业的招聘信息中统计而来,相对来说还是比较真实的,虽然有些公司的招聘要求万年不变,但还是可以大致反应企业的招聘要求的. 尽管Struts2漏洞频出,但是由于政府.银行以及传统企业遗留项目 ...
- (转)python中的*args和**kw到底是个啥。看下面的例子就会懂了
先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '----------- ...
- 服务器证书安装配置指南(SLB)
一.生成证书请求 1.下载CSR生成工具 您需要使用CSR生成工具来创建证书请求. 下载AutoCSR: http://www.itrus.cn/soft/autocsr.rar 2.生成服务器 ...
- Akamai在内容分发网络中的算法研究(翻译总结)
作者 | 钱坤 钱坤,腾讯后台开发工程师,从事领域为流媒体CDN相关,参与腾讯TVideo平台开发维护. 原文是<Algorithmic Nuggets in Content Delivery& ...
- 模式识别与机器学习—bagging与boosting
声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验. (1)在介绍Bagging和Boosting算法之前,首先要简 ...
- css2.1实现圆角边框
虽然css3的border-radius实现圆角很简单,但是我还是认为css2.1中好多技术还是很值得学习的,我也是后来才知道这就是传说中的滑动门技术.脑洞大开啊 附上demo <!DOCTYP ...
- SQL Server 给表和字段添加说明
.添加表说明 EXECUTE sp_addextendedproperty N'MS_Description','表说明',N'user',N'dbo',N'table',N'表名',NULL,NUL ...
- Object-C知识点
Object-C常用的知识点,以下为我在实际开发中用到的知识点,但是又想不起来,需要百度一下的知识点 1. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: ...
- adobe edge animate 和 adobe animate cc 有啥区别?
经常有人问这两款软件的区别,每次都要打字好烦,特此总结发帖如下: 一.首先各自软件介绍 ①adobe edge animate 是adobe公司早期推出的一款网页互动工具.通过HTML+CSS+Jav ...