c++ socket学习(1.2)

本文学习相关资料:
C/C++ socket编程教程

环境:vs2015
源码:本文代码

windows 如何创建客户端与服务端通信?

UDP:

这次就没什么客户端服务端好说了,UDP是没有无连接的
所以改叫接收端和发送端吧

接收端

TCP不同的是,在创建套接字的时候填写的参数不同

/*
SOCK_DGRAM:表示使用无连接的传输方式
IPPROTO_UDP:表示使用UDP协议
*/
SOCKET servSock = SOCKET(AF_INET,SOCK_DGRAM, IPPROTO_UDP);
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));//初始化
sockAddr.sin_family = AF_INET;         //同上,即使用ipv4
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //说明要监听的ip地址
sockAddr.sin_port = htons(9000);  //说明要监听的端口

然后还是要绑定ip端口的:

bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));

无连接嘛,就不用监听了,等着发消息过来就好了。

/*
recvfrom 和recv类似,不过是一个用于UDP接收数据,一个是TCP接收数据
第一个参数:上面和ip地址、端口绑定的套接字
第二个参数:接收数据
第三个参数:接收数据的最大长度(字节)
第四个参数:???
第五个参数:数据是从哪里来的(发送端的IP地址和端口)
第六个参数:第五个参数的大小
返回值:实际接收的数据大小(字节)
*/
int readlen = 200;
char buf[readlen+10];
sockaddr_in clntAddr;
int recvlen = recvfrom(servSock, buf, readlen, 0, (sockaddr*)&clntAddr, &nSize);

好的,信息我都收到了,我要关闭了(和TCP一样)

closesocket(servSock);
WSACleanup();

发送端

和上面一模一样

SOCKET servSock = SOCKET(AF_INET,SOCK_DGRAM, IPPROTO_UDP);
sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr));//初始化
sockAddr.sin_family = AF_INET;         //同上,即使用ipv4
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //说明接收端的ip地址
sockAddr.sin_port = htons(9000);  //说明接收端的端口

好的,我们可以发送信息了

/*
sendto 和send类似
第一个参数:发送用的套接字
第二个参数:发送的内容
第三个参数:发送内容的长度
第四个参数:???
第五个参数:接收端的ip地址和端口
第六个参数:第五个参数的大小
*/
sendto(servSock,"Hello Server",13,0,(sockaddr*)&servAddr,sizeof(sockaddr));

好了,现在发送完了,是时候关闭资源了

closesocket(servSock);
WSACleanup();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js高级功能与高级需求、高级期待

http://www.cnblogs.com/leadzen/archive/2008/02/25/1073404.html 简单练习题:http://tieba.baidu.com/p/2189347922 ---------------------- scope链 闭包 Javascript属性prototype node.js metaprogramming AMD、CMD机制 http://www.makumo.com/js-modules-amd-c…

synchronized同步锁

在多线程的情况下,由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。由于我们可以通过 private…

c++ socket学习(1.3)

本文学习相关资料: C/C socket编程教程 环境:vs2015 源码:本文代码 在这里c socket学习(1.1)学到了怎么样建立TCP,然后通过TCP连接发送、接收信息。 但是都是一次性的,当时是接收信息后就结束…

一个一线城市的IT白领的生活成本:3万/年

自从大学毕业,经济独立,就开始全面统计各种生活开支。仔细的去统计下,发现开销还是挺大的。 定理:开销越大,就意味着你每个月的收入必须越高。 三族鼎立节余族: 收入-开支 > 0月光族:收入-开支 0透支族…

android 编译共享ccache的缓存

1. android自带的ccache版本号(2.4版本号)过低,是无法支持以上的功能的,须要使用新版ccache。2. 最新的ccache请到http://ccache.samba.org/download.html下载3. 下载解压之后,在linux底下进入ccache文件夹,执行:./configure./mak…

一位软件工程师的6年总结

作者:成晓旭 “又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经 历沉淀或者经验提炼,希望对所有的软件工…

c++ socket学习(1.4)

本文学习相关资料: C/C socket编程教程 环境:vs2015 源码:本文代码 前面学到了TCP怎么循环发包,但是TCP连接的话会出现一个问题粘包。 TCP连接接收到的数据并不是马上读取到内存里面的,而是放在缓冲区,让…

mongodb中分页显示数据集的学习

mongodb中分页显示数据集的学习 这次继续看mongodb中的分页。首先依然是插入数据: 1) db.Blog.insert( { name : "Denis", age : 20, city : "Princeton" } ) db.Blog.insert( { name : "Abe", age : 30, city : &quo…

学习编程,英语很重要!!

学会编程,可能不需要英语多好,但是学号编程,英语真的很重要!!! 好多文档,demo全是英文的,蛋疼,应许需要学习!!!转载于:https://www.cn…

c++ socket学习(1.5)

本文学习相关资料: C/C socket编程教程 环境:vs2015 源码:本文代码 这次来试一下使用TCP来传输文件,其实传输数据和差不多,就是多一个读取文件,和一个写文件而已。 服务端 int readlan 100; std::ifst…

matlab生成HEX文件-任意信号 大于64K长度

HEX文件格式不赘述,写里直接放上代码。请批评改正。 1 %%convert a signal data into hex file format2 % data format:16bit 3 % signal length: less than 2^24-14 % author: Yang Li yangli0534gmail.com5 % data:2015.01.276 7 clear all;8 close all;9 clc; 10…

移动端网页中ViewPort的使用

<meta name"viewport" content"widthdevice-width,target-densitydpihigh-dpi, initial-scale1.0, minimum-scale1.0, maximum-scale1.0, user-scalableno"> <meta name”viewport” content”widthdevice-width, initial-scale1.0, user-scalabl…

c++ socket学习(1.6)

本文学习相关资料&#xff1a; C/C socket编程教程 环境&#xff1a;vs2015 源码&#xff1a;本文代码 这次来看看UDP 之前在c socket学习&#xff08;1.2&#xff09;讲过UDP怎么发送了&#xff0c;那现在来做一个可以一直发送的。 这次没有什么接收端和发送端了&#xff0…

redis学习笔记——(1)

1. NoSQL&Redis介绍 NoSQL&#xff0c;Not Only SQL&#xff0c;是非关系型的数据库。传统的关系数据库不能满足超大规模和高并发的应用。 是以Key-Value的形式存储&#xff0c;&#xff08;例如JSON,XML&#xff09;&#xff0c;不一定遵循传统数据库的一些基本要求&#…

命令模式坚决svn树冲突(local unversioned, incoming add upon update)

当工作目录修改删除过时更新使用svn更新就容易发生树冲突“Tree Confilict”.会出现类似提示。 local unversioned, incoming add upon update1local unversioned,incoming add upon update如果使用图形化客户端可以通过对比文件和解决冲突按钮进行解决&#xff0c; 如果是使用…

c++ vector学习

参考资料&#xff1a; cppreference.com 本文代码&#xff1a; 本文源码 目录隐式成员函数1.operator &#xff08;赋值给容器&#xff09;2.assign &#xff08;将值赋给容器&#xff09;元素访问3.at &#xff08;访问指定元素&#xff0c;进行下标检查&#xff09;4.operat…

linux关闭声音

对于CentOS/Redhat/RHEL/Fedora系统&#xff0c;使用root身份执行&#xff1a;echo "alias pcspkr off" >> /etc/modprobe.conf转载于:https://www.cnblogs.com/keethebest/p/3434821.html

Bundle Identifier

Bundle Identifier : 产品的唯一标识符 1.在模拟器上面&#xff0c;只能有一个唯一的标识符的应用程序 2.在AppStore上&#xff0c;所有的应用程序的Bundler ID都是唯一的 Bundle ID 公司的反向域名 产品名 Bundle ID 不支持中文&#xff0c;因此如果是上架产品&#xff0c;需…

c++ array学习

参考资料&#xff1a; cppreference.com 本文代码&#xff1a; 本文源码 array和vector的区别是array是和C中的数组类似&#xff0c;不能动态改变数组大小&#xff0c;所以会比vector少很多函数。 目录隐式定义的成员函数1.operator &#xff08;将另一个容器拷贝过来&#x…

lucene4入门(2)搜索

欢迎转载http://www.cnblogs.com/shizhongtao/p/3440479.html 接着上一篇&#xff0c;这里继续搜索&#xff0c;对于搜索和创建一样&#xff0c;首先你要确定搜索位置&#xff0c;然后用规定的类来读取。还要注意一点&#xff0c;确定分词器&#xff0c;因为不同的分词器所创建…