C++ 利用socket实现TCP,UDP网络通信

       学习孙鑫老师的vc++深刻浅出,有一段时间了,第一次接触socket说实话有点儿看不懂,第一次基本上是看他说一句我写一句完成的,第二次在看SOCKET多少有点儿感受了,接下来我把利用SOCKET完成TCP和UDP两种通信模式的流程和代码分享一下,但愿对你们多少能有点儿帮助,有什么说的不对的欢迎各位大神指正。c++

   TCP服务器

      TCP是点对点的通信模式,数据传输质量高,对于传输数据完整性要求高的状况通常用TCP,具体到vc++中,通常选用的是服务器/客户端模式,socket实现TCP通信在服务器端通常分为如下几步:socket

服务器端函数

      1.加载套接字库,加载套接字库的代码通常是固定的每次复制如下就OK。学习

      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)
   {spa

    WSACleanup();
     return;
   }io

    2.建立套接字变量

    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN sockaddr;//建立一个地址结构体,对它的变量进行设置
    sockaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    sockaddr.sin_family=AF_INET;
    sockaddr.sin_port=htons(6000);
cli

    3.将套接字和IP地址和端口链接服务器端

    bind(sockSrv,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR));//绑定

    4.将套接字设置为监听模式

    listen(sockSrv,5);//设置为监听模式

    5.建立连接套接字

    SOCKADDR_IN sockclient;
    int len=sizeof(SOCKADDR);
    SOCKET sockCon=accept(sockSrv,(SOCKADDR*)&sockclient,&len);//建立连接套接字

    6.发送和接收数据给客户端

    char sendBuf[100];

    send(sockCon,sendBuf,strlen(sendBuf)+1,0);
    char recvBuf[100];
    recv(sockCon,recvBuf,100,0);//发送\接收函数

    7.关闭套接字

    closesocket(sockCon);//关闭套接字

客户端

    1.加载套接字库

    与服务器端代码同样,直接复制就能够

    2.建立套接字

    SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN sockaddr;
    sockaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    sockaddr.sin_family=AF_INET;
    sockaddr.sin_port=htons(6000);

    3.套接字和IP地址和端口链接

    connect(sockClient,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR));

    4.发送接收数据给服务器

    char recvBuf[100];
    recv(sockClient,recvBuf,100,0);
    printf("%s\n",recvBuf);
    send(sockClient,"服务器你好",strlen("服务器你好")+1,0);

    5.关闭套接字

    closesocket(sockClient);
    WSACleanup();

别忘了加上头文件#include<winsock2.h>同时要在link一下ws2_32.lib.而后就OK了。

UDP

udp是面向无链接的,广播式的数据传输机制,它的实时性高,输出传输的完整性无法保证,对于一些实时性要求高,完整性要求不高的状况采用UDP。

服务器端

1.加载套接字库

 啥也不说了,直接复制

2.建立udp套接字

   SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);//这里主要与TCP模式下该参数的区别
   SOCKADDR_IN sockaddr;//建立一个地址结构体,对它的变量进行设置
   sockaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
   sockaddr.sin_family=AF_INET;
   sockaddr.sin_port=htons(6000);

3.将套接字和IP地址和端口绑定

   bind(sockSrv,(SOCKADDR*)&sockaddr,sizeof(SOCKADDR));//绑定

4.接收数据

这里的接收函数用的是recvfrom();

5.关闭套接字

   closesocket(sock);

客户端

1.加载套接字库

 

 啥也不说了,直接复制

 

2.建立UDP套接字

    SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
    SOCKADDR_IN sockaddr;
    sockaddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    sockaddr.sin_family=AF_INET;
    sockaddr.sin_port=htons(6000);

3.发送数据

   sendto();//发送函数也有区别的

4.关闭套接字

  closesocket(sockClient);
  WSACleanup();

别忘了加上头文件#include<winsock2.h>同时要在link一下ws2_32.lib.而后就OK了。

相关文章
相关标签/搜索