摘自: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编程相关推荐

  1. Python中Socket编程

    目录 Python中Socket编程 1 一.Socket概述 1 二.python中socket模块使用 1 三.socket之聊天室 3 四.socket之端口探测 7 五.scapy之tcp端口 ...

  2. android c++ socket编程,C++ 中 socket编程实例详解

    C++ 中 socket编程实例详解 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的soc ...

  3. [转]vc中socket编程步骤

    sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的socket编程是采用的流式套接字.在这个程 ...

  4. java中socket编程实例_Java中socket编程的实现过程(代码实例)

    本篇文章给大家带来的内容是关于socket编程的实现过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.socket 服务器搭建 实例化socket服务器,循环获取请求packa ...

  5. qt中socket编程

    1 文章概括 在qt中借助designer设计通信界面,然后使用QTcpServer,QTcpSocket编写服务器和客户端的程序. 首先建立两个工程,一个是客户端client,另一个是服务器端ser ...

  6. linux咋socket编程,linux中socket编程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 客户端:include #include #include #include #include #include #include #include #i ...

  7. linux中的socket编程,linux中socket编程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 客户端:include #include #include #include #include #include #include #include #i ...

  8. C#中socket编程中文乱码

    Encoding.ASCII.GetString(bytes, 0, bytesRec);这个是ASCII码转换,如果是中文就出错, 所以解决办法改为Encoding.UTF8.GetString(b ...

  9. Linux中的socket编程

    目录 0.前言 1.Linux中socket编程接口详解 1.1.socket函数 1.2.bind函数 为什么addr参数要使用sockaddr_in 结构体,然后再强制转换为 sockaddr 类 ...

最新文章

  1. LINUX 下 WEBlogic集群的搭建-01
  2. 给爸妈最硬核的春节礼物,走入百度大字版APP研发幕后
  3. boost::core模块实现constexpr的地址
  4. odoo 自定义视图_如何使用Windows的五个模板自定义文件夹视图
  5. 使用Entity Framework和Web API的ASP.NET Core Blazor CRUD
  6. Java中数字格式化format方法
  7. MOODLE的安装与基本配置
  8. 瞻博QFX5100系列交换机光模块解决方案
  9. dva的用法_dva 的基本用法
  10. android手机log文件工具,手机文件日志app下载-手机文件日志 安卓版v1.0-PC6安卓网...
  11. android开发隐藏图片,用美图看看安卓版教你如何隐藏私人图片(图文)
  12. 苹果原生二维码生成与扫描及生成的二维码不清楚的解决方案
  13. 荣品RP4412开发板摄像头驱动调用及对焦控制
  14. 【夏目鬼鬼分享】RabbitMQ路由模式
  15. 阿帕奇HTTP服务器下载与安装
  16. 树的直径,树的重心,树的分冶
  17. 智能交通应用GPS北斗定位模块
  18. yarn安装vue-cli
  19. 在Ubuntu 14.04上设置私有Docker Registry
  20. 微信开放平台初步对接开发(PHP)

热门文章

  1. 使用 stm32实现锂电充电_实现高负载锂电池的超快速充电需要哪些要求?
  2. java修饰类的关键字_JAVA中的修饰关键字
  3. python学习-syspath、系统内置模块
  4. IntelliJ IDEA scala的源码设置
  5. 常见的python模块_python常见模块
  6. 10投屏后没有声音_手机投屏到电视没有声音?
  7. android搭建https,android 搭建https Server(示例代码)
  8. wifi信号增强android,WiFi信号增强大师APP
  9. 高压电是以交流,还是直流方式输送?
  10. 这样理解PWM,想不懂都难!