MFC socket网络编程(流程示例)


MFC socket网络编程(流程示例)

1.TCP流式套接字的编程步骤 在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK!

服务器端程序:

1、加载套接字库
2、创建套接字(socket)。
3、将套接字绑定到一个本地地址和端口上(bind)。
4、将套接字设为监听模式,准备接收客户请求(listen)。
5、等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。
6、用返回的套接字和客户端进行通信(send/recv)。
7、返回,等待另一客户请求。
8、关闭套接字。

客户端程序:

1、加载套接字库
2、创建套接字(socket)。
3、向服务器发出连接请求(connect)。
4、和服务器端进行通信(send/recv)。
5、关闭套接字。

服务器端代码如下:

#include <Winsock2.h>//加裁头文件
#include <stdio.h>//加载标准输入输出头文件
void main()
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );//1.1版本的套接字
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) { return; }//加载套接字库,加裁失败则返回
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}//如果不是1.1的则退出
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字(socket)。
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换Unsigned short为网络字节序的格式 addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //将套接字绑定到一个本地地址和端口上(bind) listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求(listen)。
SOCKADDR_IN addrClient;//定义地址族
int len=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); //accept的第三个参数一定要有初始值。 //等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。 //此时程序在此发生阻塞
char sendBuf[100];
sprintf(sendBuf,"Welcome %s to www.msn.com.cn",inet_ntoa(addrClient.sin_addr)); //用返回的套接字和客户端进行通信(send/recv)。
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf("%s\n",recvBuf);
closesocket(sockConn);//关闭套接字。等待另一个用户请求
}
}


客户端代码如下:

#include <Winsock2.h>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );//加载套接字库
if ( err != 0 ) { return; }
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);//创建套接字(socket)。
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//向服务器发出连接请求(connect)。
char recvBuf[100];//和服务器端进行通信(send/recv)。
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is blues_j",strlen("This is blues_j")+1,0);
closesocket(sockClient);//关闭套接字。
WSACleanup();//必须调用这个函数清除参数
}


2.UDP型套接字。 服务器端(接收端)程序:

1、创建套接字(socket)。
2、将套接字绑定到一个本地地址和端口上(bind)。
3、等待接收数据(recvfrom)。
4、关闭套接字。 客户端(发送端)程序:
1、创建套接字(socket)。
2、向服务器发送数据(sendto)。
3、关闭套接字。

服务器端代码:

#include <Winsock2.h>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) { return; }
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100];
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf("%s\n",recvBuf);
closesocket(sockSrv); WSACleanup();
}

客户端代码:

#include <Winsock2.h>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) { return; }
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
sendto(sockClient,"Hello",strlen("Hello")+1,0, (SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
}

3.聊天程序常用的是UDP式套接字。因为TCP的三步握手开销比较大。

转载于:https://www.cnblogs.com/lishennan/p/4362963.html

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

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

相关文章

qfiledialog文件过滤_自定义高级QFileDialog文件过滤器

QFileDialog提供了一个函数---setproxyModel。。就是用这个来玩了。就是override filterAcceptsRow的虚函数&#xff0c;里面定制自己的过滤需求。返回bool 下面就是判断是否是目录&#xff0c;只显示目录文件夹。1 #ifndef PROXY_MODEL_H2 #define PROXY_MODEL_H34 #include…

【Azure + Core】实现CI/CD(一)构建镜像并推送仓库

&#xff08;海上生明月&#xff0c;天涯共此时&#xff09;今天是农历八月十六&#xff0c;大家中秋节快乐&#xff01;放了三天假&#xff0c;和家人整理下屋子&#xff0c;打扫下卫生&#xff0c;闲着无聊就研究点儿新东西。最近一直再看DevOps相关的内容&#xff0c;自从开…

detectron2训练自己的数据集_keras版MaskRCNN来训练自己的目标检测数据集

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447;机器学习AI算法工程 公众号&#xff1a;datayx一、运行环境的安装&#xff1a;1、下载好cuda9跟cudnn7&#xff0c;然后在安装好后&#xff0c;cuda其会自动添加到环境变量里&#xff0c;所以使用kera…

Win7系统中必需记住的14个常用快捷键

在使用电脑时&#xff0c;多多少少地都会用到一些快捷键&#xff0c;尤其是在玩游戏&#xff0c;或使用一些软件时。快捷键不仅方便&#xff0c;如果用的好&#xff0c;甚至可以大大提升我们的工作效率。而且&#xff0c;快捷键不仅可以在软件中使用&#xff0c;在Win7系统中其…

git 删除远程分支

2019独角兽企业重金招聘Python工程师标准>>> git branch -r -d origin/dev git push origin :dev 注意&#xff1a; git push origin 后面有个空格 转载于:https://my.oschina.net/u/1176097/blog/391573

float型y取值在1.0c语言表达式,2011年全国计算机二级C语言模拟试题及答案(14)...

一、选择题(1—14每题1分&#xff0c;15-18每题1.5分&#xff0c;共20分)1.可选作用户标识符的一组标识符是()AvoidBc5_b8CForD3aDefine_53-abDOWORDIFCaseint2.在C语言中&#xff0c;非法的八进制是&#xff1a;()A.018B.016C.017D.02573.在TC中&#xff0c;基本inta[4]类型变…

我看过《隐秘的角落》才知道,理科生有多可怕!

全世界只有3.14 % 的人关注了爆炸吧知识最近&#xff0c;大家都被《隐秘的角落》刷屏了吧&#xff1f;但吃瓜、看瓜的背后&#xff0c;我看到了理科生的可怕之处。数学课上&#xff0c;为了暗示朱朝阳自己杀人其实是因为被背叛&#xff0c;张东升利用笛卡尔在爱情里或美好与悲惨…

mysql sleep详解_sql注入详解(二)

sql注入详解4、检测方法首先是判断能不能进行sql注入是哪种sql注入(1)数字型?id1 and 11 返回成功?id1 and 12 返回失败这说明是数字型注入&#xff0c;或者叫整型注入此时后台是select * from where id x and 11select * from where id x and 12显然一个判断为真&#x…

Visual Studio的奇淫技巧,你知道多少?

如果你像我一样&#xff0c;或许你也沉迷于开发者工具。这就是我喜欢 Visual Studio 的原因之一——它有无数的生产力技巧。这篇文章将展示五个这样的技巧&#xff0c;这些技巧对我每天的工作都有帮助。请注意&#xff0c;这些仅适用于 Visual Studio。有像ReSharper[1]、Rosly…

promise的状态以及api介绍_前端 api 请求缓存

作者&#xff1a;wsafighthttps://github.com/wsafight/personBlog/issues/2web开发时&#xff0c;性能都是必不可少的话题。对于webpack打包的单页面应用程序而言&#xff0c;我们可以采用很多方式来对性能进行优化&#xff0c;比方说 tree-shaking、模块懒加载、利用 extrens…

哎,累死了~..~

下午睡觉一起床&#xff0c;打开博客园时&#xff0c;才发现后台原来可以用CSS来弄主页啊&#xff0c;我个猪头&#xff0c;才发现。。。弄了一下午&#xff0c;终于搞了个像样的&#xff0c;嘿嘿&#xff0c;浪漫典雅&#xff0c;不失严谨&#xff0c;有点类似Metro风格&#…

RedHat el5.0 搭建 Postfix 邮件服务器系统一

RedHat el5.0 搭建 Postfix 邮件服务器系统 (postfixcyrus-sasl2courier-authlibcourier-imapextmailmaildrop) 一、系统环境 操作系统&#xff1a;rhel-5.2 所需软件&#xff08;按网上以前的文档&#xff0c;好多版本都找不到&#xff…

C# 数据结构--排序[下]

希尔排序&#xff08;Shell Sort&#xff09; 排序思想&#xff1a; 先取一个小于n的整数d1作为第一个增量&#xff0c;把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序&#xff1b;然后&#xff0c;取第二个增量d2<d1重复上述的…

奥林匹克数学竞赛教练员汇编,最牛奥数资料全集!

全世界只有3.14 % 的人关注了爆炸吧知识1985年&#xff0c;由北京大学、南开大学、复旦大学和中国科技大学四所大学倡议&#xff0c;中国数学会决定&#xff0c;自1986年起每年一月份&#xff08;第29届起改为每年12月举行&#xff09;举行全国中学生数学冬令营&#xff0c;后又…

centos7 禁止ip访问_centos7.6版本限制某个IP访问指定端口

centos7 更新安全补丁:yum update -y centos7 firewall防火墙很好用,最近总被黑客入侵服务器系统,搞的很不耐烦,通过大佬的指点,知道怎么限制IP和端口了,先感谢DS大佬。 我这安装的是centos7.6,默认安装完成之后服务器的防火墙没有运行。 查看防火墙状态: firewall-cmd…

兔子野鸡49只100条腿c语言,家禽生产学复习题

家禽生产学复习资料(07年-12年试题及其答案)一、名词解释(每题2.5分&#xff0c;共25分)1、胚盘:受精后的蛋&#xff0c;生殖细胞在输卵管过程中&#xff0c;经过分裂&#xff0c;形成中央透明、周围暗的盘状形原肠胚。2、气囊:是装有空气的膜质囊&#xff0c;一端与气管相连&a…

成长 | 《大厂晋升指南》学习总结(中)

【学习总结】| Edison Zhou上一篇总结了晋升体系和职级详解&#xff0c;本篇总结面评技巧和学习方法。温馨提示&#xff1a;文中的贴图均来自极客时间《大厂晋升指南》课程。1面评技巧PPT框架华仔在多年的晋升答辩评委经历中总结了晋升答辩PPT的3个常见误区&#xff1a;&#x…

window.location.reload()会掉参数吗_iPhone手机电量不够用,你真的会用苹果吗?设置好这几个就OK了!...

用过iPhone的小伙伴都知道iPhone手机里的IOS系统&#xff0c;正是因为IOS系统独特的流畅度吸引了很多的用户成为了果粉。但是如今在中国市场上&#xff0c;iPhone手机在市场上占据的份额一年比一年低&#xff0c;近几年新兴崛起的国产手机华为、VIVO、小米以及年青人品牌的魅族…

Linux 下 MySQL 启动与关闭 说明

一.启动1.1 MySQL 进程可以用ps 命令查看进程&#xff1a;[rootrac2 ~]# ps -ef|grep mysqlroot 2161 1 0 09:38 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe--datadir/var/lib/mysql --pid-file/var/lib/mysql/rac2.pidmysql 2418 2161 0 09:38 ? …

四种DCOM错误的区别,0x80080005 0x800706be 0x80010105 0x

四种DCOM错误的区别Differences between the following DCOM error0x800800050x800706be0x800101050x800706ba0x80080005:CO_E_Server_Exec_FailureServer execution failedIt is usually quite clear: COM (really, RPCSS) tried to launch a particular server process and e…