作者: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. Visual Studio 2015/2017 与ASP.NET CORE 联合创建具有SPA模式的Angular2模板

    虽然注册博客园很久,但是一直没有什么可写的,真心感觉好尴尬了,这次终于找到了一点可以写,有点小兴奋和小害羞呢. 进入主题,前端SPA模式越来越受到欢迎,Core 也开始被很多企业提上日程,但是因为这个 ...

  2. linux系统和Windows系统共存

    最近接触了linux系统,因为对linux系统一直存在一种敬畏之心,所以决定研究研究 那么今天我在这里呢是要和大家分享一下在Windows存在的情况下安装双系统linux 那么第一步呢,就是斤BIOS ...

  3. iOS全角符与半角符之间的转换

    iOS全角符与半角符之间的转换 相关资料: 函数『CFString​Transform』中文 详情: 问题 1.17-03-15,「有人在群里边问怎么把『半角』符字符串转换成『全角』字符串?」,百度的 ...

  4. 安装vnc远程连接CentOS桌面

    1.查看本机是否有安装vnc(centOS5默认有安装vnc) rpm -q vnc vnc-server 如果显示结果为: package vnc is not installedvnc-serve ...

  5. oStrictHostKeyChecking=no 参数

    应用在脚本当中,避免使用域名链接服务器的时候,检查knows_hosts文件

  6. CodeBlocks常用重要快捷键大全!!

    CodeBlocks常用操作快捷键 编辑部分: Ctrl + A:全选 Ctrl + C:复制 Ctrl + X: 剪切 Ctrl + V:粘贴 Ctrl + Z:撤销(后退一步) Ctrl + S: ...

  7. pl sql 查询显示乱码解决方法——设置环境变量NLS_LANG

    用oracle进行查询的时候,有的时候会出现查询结果为乱码的情况,此时要设置一个环境变量NLS_LANG. 此变量的值如何获得呢?运行下面sql语句就可以获得: select userenv('lan ...

  8. [SinGuLaRiTy] 字节大小

    [SinGuLaRiTy-1006] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 16位编译器 char 1个字节 char*(即指针变量 ...

  9. 大数据测试之hadoop系统生态

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标,也是国内最早探索大数据测试培训的机构,开发了独有的课程体系.如果对课程感兴趣,请大 ...

  10. 微软在.NET官网上线.NET 架构指南频道

    微软在Visual Studio 2017 正式发布的时候也上线了一个参考应用https://github.com/dotnet/eShopOnContainers , 最近微软给这个参考应用写了完善 ...