使用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 ...
随机推荐
- 2017-3-18 SQL server 数据库 45道题
use data02161212 create table student (Sno nvarchar(3) primary key, Sname nvarchar(8) not null, Ssex ...
- WPF中MeasureOverride ArrangeOverride 的理解
1. Measure Arrange这两个方法是UIElement的方法 MeasureOverride ArrangeOverride这两个方法是FrameworkElement的方法,Framew ...
- (转)CentOS下一键安装GitLab
[环境准备]OS: CentOS 6.3 x86_64 [安装要求]如果有条件,提供一台全新的Server(仅仅只安装了一些系统的软件包),可以直接使用一键安装脚本(gitlab-install-el ...
- python终端中退格键,方向键不能使用
在安装Python的时候先安装 yum install readline-devel.x86_64 -y 如果python已经安装过了就重新安装 ./configure make all mak ...
- 自己开发图表插件,脱离echart
前言 由于公司业务需要做一些图标来展示一些数据,之前都是用百度的echart.js.这次放弃使用它转而自己开发是有几个原因1.echart文件太大,有些功能用不到2.echart样式不易扩展3.需求简 ...
- SharePoint 配置传出电子邮件设置
1. 环境参数说明 A) Windows Server 2012 R2 B) SharePoint 2016 C) 第三方邮件服务器(smtp.3th.com - 有负载均衡,即对应多个IP服务器) ...
- 译:Missing index DMV的 bug可能会使你失去理智---慎重看待缺失索引DMV中的信息
注: 本文译自https://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/ 原文作者 ...
- vuejs2.0子组件改变父组件的数据
在vue2.0之后的版本中,不允许子组件直接改变父组件的数据,在1.0的版本中可以这样操作的,但是往往项目需求需要改变父组件的数据,2.0也是可一个,区别是,当我们把父元素的数据给子组件时,需要传一个 ...
- jquery、js获取页面高度宽度等
jquery获取页面高度宽度 //获取浏览器显示区域(可视区域)的高度 : $(window).height(); //获取浏览器显示区域(可视区域)的宽度 : $(window).width(); ...
- iOS 历史浏览网页的定向跳转
在实际的开发过程中,涉及到交互的问题,原生和H5的网页相互嵌套,直接造成跳转的混乱,混乱就应该指定的历史记录中,就需要网页的一些相关的一些属性问题 需要在webview里面的代理方法中执行相对应的操作 ...