zoukankan      html  css  js  c++  java
  • WinCE下Socket基本函数

    在软件开发中“网络编程”是必不可少的基本功了;本文所讲的Socket编程也就是网络编程中的一种形式;当然你如果想问我什么叫“Socket”,很遗憾的是我也不能准确的告诉你!但我们可以确定的是Sock并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议,但是它可以访问很多种网络协议,你可以把他当作一些协议的封装。

    Socket编程涉及Socket服务端与客户端编程;与VC6下的Socket编程一样(VC6用ws2_32.lib库,而WinCE则用Ws2.lib库),服务端与客户端编程都需经历如下步骤:

    服务端步骤:

    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())。

    简单服务端例子如下:

    #include <Winsock2.h>

    #pragma comment( lib, "Ws2.lib" )

    void TestSocketServer( void )

    {

         WSADATA wsaData;

         if (WSAStartup(0x0202, &wsaData)!=0)

         {

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

             closesocket(sockConn);

         }

    }

    简单客户端例子如下:

    #include <Winsock2.h>

    #pragma comment( lib, "Ws2.lib" )

    void TestSocketClient( void )

    {

         WSADATA wsaData;

         if (WSAStartup(0x0202, &wsaData)!=0)

         {

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

         closesocket(sockClient);

         WSACleanup();

    }

  • 相关阅读:
    git线上操作
    IDEA快捷方式
    Java 四种线程池
    java 获取当前天之后或之前7天日期
    如何理解AWS 网络,如何创建一个多层安全网络架构
    申请 Let's Encrypt 通配符 HTTPS 证书
    GCE 部署 ELK 7.1可视化分析 nginx
    使用 bash 脚本把 AWS EC2 数据备份到 S3
    使用 bash 脚本把 GCE 的数据备份到 GCS
    nginx 配置 https 并强制跳转(lnmp一键安装包)
  • 原文地址:https://www.cnblogs.com/fujinliang/p/2757667.html
Copyright © 2011-2022 走看看