C++中socket编程
摘自:http://www.cnblogs.com/Sniper-quay/archive/2011/06/22/2086636.html
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。
服务器端编程的步骤:
1:加载套接字库,创建套接字(WSAStartup()/socket());
2:绑定套接字到一个IP地址和一个端口上(bind());
3:将套接字设置为监听模式等待连接请求(listen());
4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());
5:用返回的套接字和客户端进行通信(send()/recv());
6:返回,等待另一连接请求;
7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
客户端编程的步骤:
1:加载套接字库,创建套接字(WSAStartup()/socket());
2:向服务器发出连接请求(connect());
3:和服务器端进行通信(send()/recv());
4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
第一式: 加载/释放Winsock库:
1.加载方法:
WSADATA wsa;
/*初始化socket资源*/
if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
{
return; //代表失败
}
2.释放方法:
WSACleanup();
第二式: 构造SOCKET:
1.服务端:构造监听SOCKET,流式SOCKET.
SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0)
2.客户端:构造通讯SOCKET,流式SOCKET.
SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0)
第三式:配置监听地址和端口:
1.服务端: SOCKADDR_IN serverAddr
ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(1234); /*本地监听端口:1234*/
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /*有IP*/
第四式: 绑定SOCKET:
1.服务端:绑定监听SOCKET.
bind(Listen_Sock,(struct sockaddr *)&serverAddr,sizeof(serverAddr))
第五式: 服务端/客户端连接:
1.服务端:等待客户端接入.
SOCKET Command_Sock = accept(Listen_Sock, ...)
2.客户端:请求与服务端连接.
int ret = connect(Client_Sock, ...)
第六式: 收/发数据:
1.服务端:等待客户端接入.char buf[1024].
接收数据:recv(Command_Sock,buf, ...)
或
发送数据:send(Command_Sock,buf, ...)
2.客户端:请求与服务端连接.char buf[1024].
发送数据:send(Client_Sock,buf, ...)
或
接收数据:recv(Client_Sock,buf, ...)
第七式: 关闭SOCKET:
1.服务端:关闭SOCKET.
closesocket(Listen_Sock)
closesocket(Command_Sock)
2.客户端:关闭SOCKET.
closesocket(Client_Sock)
服务器端#include <stdio.h> #include <Winsock2.h> //导入头文件 void main() { //版本号WORD wVersionRequested; //winsock数据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,流式socketSOCKET sockSrv=socket(AF_INET,SOCK_STREAM,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));//监听方法listen(sockSrv,5);//客户端socketSOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);//持续发送接收while(1){SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);char sendBuf[50];sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));send(sockConn,sendBuf,strlen(sendBuf)+1,0);char recvBuf[50];recv(sockConn,recvBuf,50,0);printf("%s\n",recvBuf);closesocket(sockConn);}}
客户端
#include <stdio.h> #include <Winsock2.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);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));send(sockClient,"hello",strlen("hello")+1,0);char recvBuf[50];recv(sockClient,recvBuf,50,0);printf("%s\n",recvBuf);closesocket(sockClient);WSACleanup(); }
C++中socket编程相关推荐
- Python中Socket编程
目录 Python中Socket编程 1 一.Socket概述 1 二.python中socket模块使用 1 三.socket之聊天室 3 四.socket之端口探测 7 五.scapy之tcp端口 ...
- android c++ socket编程,C++ 中 socket编程实例详解
C++ 中 socket编程实例详解 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的soc ...
- [转]vc中socket编程步骤
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的socket编程是采用的流式套接字.在这个程 ...
- java中socket编程实例_Java中socket编程的实现过程(代码实例)
本篇文章给大家带来的内容是关于socket编程的实现过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.socket 服务器搭建 实例化socket服务器,循环获取请求packa ...
- qt中socket编程
1 文章概括 在qt中借助designer设计通信界面,然后使用QTcpServer,QTcpSocket编写服务器和客户端的程序. 首先建立两个工程,一个是客户端client,另一个是服务器端ser ...
- linux咋socket编程,linux中socket编程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 客户端:include #include #include #include #include #include #include #include #i ...
- linux中的socket编程,linux中socket编程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 客户端:include #include #include #include #include #include #include #include #i ...
- C#中socket编程中文乱码
Encoding.ASCII.GetString(bytes, 0, bytesRec);这个是ASCII码转换,如果是中文就出错, 所以解决办法改为Encoding.UTF8.GetString(b ...
- Linux中的socket编程
目录 0.前言 1.Linux中socket编程接口详解 1.1.socket函数 1.2.bind函数 为什么addr参数要使用sockaddr_in 结构体,然后再强制转换为 sockaddr 类 ...
最新文章
- LINUX 下 WEBlogic集群的搭建-01
- 给爸妈最硬核的春节礼物,走入百度大字版APP研发幕后
- boost::core模块实现constexpr的地址
- odoo 自定义视图_如何使用Windows的五个模板自定义文件夹视图
- 使用Entity Framework和Web API的ASP.NET Core Blazor CRUD
- Java中数字格式化format方法
- MOODLE的安装与基本配置
- 瞻博QFX5100系列交换机光模块解决方案
- dva的用法_dva 的基本用法
- android手机log文件工具,手机文件日志app下载-手机文件日志 安卓版v1.0-PC6安卓网...
- android开发隐藏图片,用美图看看安卓版教你如何隐藏私人图片(图文)
- 苹果原生二维码生成与扫描及生成的二维码不清楚的解决方案
- 荣品RP4412开发板摄像头驱动调用及对焦控制
- 【夏目鬼鬼分享】RabbitMQ路由模式
- 阿帕奇HTTP服务器下载与安装
- 树的直径,树的重心,树的分冶
- 智能交通应用GPS北斗定位模块
- yarn安装vue-cli
- 在Ubuntu 14.04上设置私有Docker Registry
- 微信开放平台初步对接开发(PHP)
热门文章
- 使用 stm32实现锂电充电_实现高负载锂电池的超快速充电需要哪些要求?
- java修饰类的关键字_JAVA中的修饰关键字
- python学习-syspath、系统内置模块
- IntelliJ IDEA scala的源码设置
- 常见的python模块_python常见模块
- 10投屏后没有声音_手机投屏到电视没有声音?
- android搭建https,android 搭建https Server(示例代码)
- wifi信号增强android,WiFi信号增强大师APP
- 高压电是以交流,还是直流方式输送?
- 这样理解PWM,想不懂都难!