TCPServer

// Server.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <stdio.h>  
#include <stdlib.h>  

#include <winsock2.h>
#include <fcntl.h>
#include <windows.h>
#include <io.h>
#include <sys\stat.h>
#include <iostream>
using namespace std ; 
#define FILENAME "./a.bin"
#pragma comment(lib, "ws2_32.lib")
int getfilesize(const char* p)
{
    FILE *fp = fopen(p,"r");
    if(fp)
    {
        fseek(fp, 0, SEEK_END);
        int size = ftell(fp); 
        fclose(fp);
        return size; 
    }

    return  0 ; 
}



class NetComm
{
public:
    explicit NetComm( const char * ip , int port )
    {
        WSADATA  Ws; 
        WSAStartup(MAKEWORD(2,2), &Ws) ; 
        server_sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
        if( server_sockfd == INVALID_SOCKET)
        {
            printf("create failed\n" ) ;
            exit(0);
        }
        server_address.sin_family = AF_INET; /*命名套接字*/  
        server_address.sin_addr.s_addr = inet_addr(ip);  
        server_address.sin_port = htons(port );  
        server_len = sizeof(server_address);  
        if (  bind(server_sockfd,(struct sockaddr *)&server_address,server_len)  != 0 )/*绑定套接字*/  
        {
                printf("bind failed\n" ) ;
                exit(1) ; 
        }
        listen(server_sockfd,5); 
    }

    const int OpenCursor()
    {
        while(1)
        {
            printf("%d Server waiting !\r\n" ,__LINE__);  
            client_len = sizeof(client_address);  
            client_sockfd = ::accept(server_sockfd,(struct sockaddr *)&client_address,(int*)&client_len); /*接收一个客户连接*/ 

            int Data = 0 ; 
            char *pdata= (char*) &Data ; 
            char ch[4] = {0 }  ; 
            int sizeRead = 0 ; 
            while( sizeRead  <  4 )
            {
                memset(ch,0x00,sizeof(ch) )  ; 
                int isize = ::recv(client_sockfd , ch ,  4 , 0 ) ; 
                printf("[%d] character receieved,[%s]\n" ,isize , ch) ; 
                memcpy(pdata , ch ,isize  ) ; 
                pdata += isize ; 
                sizeRead += isize ; 
            }

            printf("data = %d\n" , Data ) ; 

            sizeRead=0;
            char chBuf[1024] = {0} ; 
            char *pBuf = chBuf ; 
            char chSize[1024] = {0};
            while(sizeRead<Data)
            {
                memset(chSize,0x00,sizeof(ch) )  ; 
                int isize = ::recv(client_sockfd , chSize ,  Data  , 0 ) ; 
                printf("[%d] character receieved,[%s]\n" ,isize , chSize) ; 
            //  printf(ch);
                memcpy(pBuf , chSize ,isize  ) ; 
                pBuf += isize ; 
                sizeRead += isize ;
            }
            printf("%s\n" , chBuf ) ; 
            break;
        }

        printf("************************************\n")  ;
        unsigned char ctype=0;
        ::send(client_sockfd ,(const char*)&ctype , 1 , 0   ) ; 
        return 0;
    }


    const int Fetch()
    {
        do  
        {  
            printf("Server waiting !\r\n");  

            unsigned short i=0xFDF4;
            send(client_sockfd,(const char*)&i,sizeof(unsigned short ) , 0 );


            unsigned char type = 1 ; 
            send(client_sockfd,(const char *)&type , 1  , 0 ) ; 



            unsigned int lowSize = getfilesize(FILENAME); 
            printf("lowSize=%d\n" , lowSize) ; 
            send(client_sockfd,(const char*)&lowSize,4 , 0 );

            HANDLE fileHandle = CreateFile(FILENAME,GENERIC_READ | GENERIC_WRITE ,
            0,0,OPEN_ALWAYS,0,0); 

            HANDLE hMapping = CreateFileMapping(fileHandle,0,PAGE_READONLY,0,
            lowSize,"CSFlash") ;

            LPSTR lpData = (LPSTR)MapViewOfFile(hMapping,FILE_MAP_READ,0,0,lowSize); 
            printf("lpData=%s\n" , lpData ) ;

            send(client_sockfd,(const char*)lpData,lowSize , 0 );


            unsigned char reserver =  0;
            send(client_sockfd,(const char*)&reserver,sizeof(char) , 0 );

            unsigned short tail=0xFDF5;
            send(client_sockfd,(const char*)&tail,sizeof(tail) , 0);     
        }while(0) ; 

        return  0 ; 
    }
private:
    int server_sockfd,client_sockfd;  
    unsigned int server_len,client_len;  
    struct sockaddr_in server_address;  
    struct sockaddr_in client_address; 
} ; 

int main(int argc,char *argv[])  
{  
    NetComm  oNetComm(argv[1],atoi(argv[2])) ; 
    for(;1;)
    {
        oNetComm.OpenCursor();
        oNetComm.Fetch();
    }


    return 0;  

}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值