C++服务器与android客户端通信程序————C++服务器程序

来源:互联网 发布:字幕自动生成软件 编辑:程序博客网 时间:2024/06/05 11:09

#include <stdio.h>
#include <winsock2.h>
#include <winsock2.h>

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

#define SERVER_PORT 8521 //侦听端口

void main()
{
 int i;
    WORD wVersionRequested;
    WSADATA wsaData;
 char receiveMessage[50],meg[50];
    int ret, nLeft, length;
    SOCKET sListen, sServer; //侦听套接字,连接套接字
    struct sockaddr_in saServer, saClient; //地址信息  
    char* ptr;//用于遍历信息的指针  
    //WinSock初始化
    wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
    ret=WSAStartup(wVersionRequested, &wsaData);
    if(ret!=0)
    {
        printf("WSAStartup() failed!\n");
        return;
    }
    //创建Socket,使用TCP协议
    sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sListen == INVALID_SOCKET)
    {
        WSACleanup();
        printf("socket() faild!\n");
        return;
    }
    //构建本地地址信息
    saServer.sin_family = AF_INET; //地址家族
    saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序
    saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址
 
    //绑定
    ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));
    if (ret == SOCKET_ERROR)
    {
        printf("bind() faild! code:%d\n", WSAGetLastError());
        closesocket(sListen); //关闭套接字
        WSACleanup();
        return;
    }
 
    //侦听连接请求
    ret = listen(sListen, 5);
    if (ret == SOCKET_ERROR)
    {
        printf("listen() faild! code:%d\n", WSAGetLastError());
        closesocket(sListen); //关闭套接字
        return;
    }
 
    printf("Waiting for client connecting!\n");
    printf("Tips: Ctrl+c to quit!\n");
    //阻塞等待接受客户端连接
 while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。
 {
  length = sizeof(saClient);
  sServer = accept(sListen, (struct sockaddr *)&saClient, &length);
  printf("%s\n",inet_ntoa(saClient.sin_addr));
  if (sServer == INVALID_SOCKET)
  {
   printf("accept() faild! code:%d\n", WSAGetLastError());
   closesocket(sListen); //关闭套接字
   WSACleanup();
   return;
  }      
  nLeft = sizeof(receiveMessage);
  ptr = receiveMessage;
  while(1)
  {
 ptr = &receiveMessage[0];
   //接收数据
   ret = recv(sServer, ptr, nLeft, 0);  //返回接收长度,以及把接收内容存ptr;
   if (ret == SOCKET_ERROR)
   {
    printf("recv() failed!\n");
    return;
   }
   if (ret == 0) //客户端已经关闭连接
   {
    printf("Client has closed the connection\n");
    break;
   }
 } 
  for(i=0;i<ret;i++)
   meg[i] = receiveMessage[i];
  meg[ret] = '\0';
  printf("%s\n",  meg);
  }
 }
closesocket(sListen);
closesocket(sServer);
WSACleanup();
}

 

0 0