<s id="mvh2b"><strike id="mvh2b"><u id="mvh2b"></u></strike></s>
    1. <rp id="mvh2b"></rp>

      当前位置:首页 > IT教程

      C++ Socket编程步骤

      时间:2020-06-21 03:30:00来源:金橙教程网 作者:admin8 阅读:83次 [手机版]
       

      socket 编程

      ?

      转自https://www.cnblogs.com/chencaiming/p/7249904.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.

      ? SOCKETListen_Sock?= socket(AF_Inet, SOCK_STREAM, 0)

      2.客户端:构造通讯SOCKET,流式SOCKET.

      SOCKETClient_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.服务端:等待客户端接入.

      ? SOCKETCommand_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;

      ?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_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);

      ?SOCKADDR_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();
      }

      复制代码

      相关阅读

      gcc编译器的简介与使用

      gcc是开放源代码领域使用最广泛的编译器&#xff0c;功能强大&#xff0c;支持性能优化。目前gcc可以用来编译才C/C&#43;&#43;,JAVA等多种

      vue-cli详解

      1.何为vue-cli 简单来说就是Vue搭建的架子 API&#xff1

      clickhouse简单了解及使用

      一、clickhouse:日处理记录数&#xff1a;十亿级1.开源的列式

      linux启动出现reboot and select proper boot device

      问题描述&#xff1a; 台式机原来是固态硬盘安装的Windows&#xff0c;有一块空闲的硬盘&#xff0c;想在硬盘上安装一个linux系统&#xff0c;

      PCI Bus

      PCI Bus pinout for both 32 bit and 64 bit cards is shown below;Signal Pins 63-94 are only used on 64 bit PCI bus cards.

      分享到:

      IT相关

      程序相关

      推荐文章

      热门文章

      东北老女人嫖老头视频_无遮挡H肉动漫视频在线观看_欧美牲交a欧美牲交aⅴ另类_狼人乱码无限2021芒果