注释??

http://blog.csdn.net/fallinlovelj/article/details/48020013
TCP Server,这个是VC版本的 应该能直接编译过
需要修改
unsigned char type = 1 ;
send(client_sockfd,(const char *)&type , 1 , 0 ) ;的type值来做调试
MapViewOfFile是把所有文件的内容打到socket

.
另外Client(http://blog.csdn.net/fallinlovelj/article/details/48019995)侧代码有点Bug,我刚才改了下,你可以参照
FileTransport::Fetch3 的325-333来修改

也就是说每次Recv一块内存时,必须是while(1)的recv,计算每次得到的size,看是否与预期的一致,别的地方可以参照这个改

【最新注释】

Server模块化了一下.
oNetComm类中包含两个函数OpenCursor Fetch
OpenCursor 的作用是接收C lient端传递的参数.例如Client端传的是mesh + sql
“533945203 select * from aaaaaaaa”
这时候OpenCursor 应该收到的是这个字符串。

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

这段代码的意思是先取得Client端发的数据长度(“533945203 select * from aaaaaaaa”的长度)

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

这段代码的意思是接收服务器端的参数。也就是”533945203 select * from aaaaaaaa”

::send(client_sockfd ,(const char*)&ctype , 1 , 0   ) ; 

在接收完参数之后,服务器要做一些操作,例如查询sql,并制作二进制文件(猜测的功能吧)
在做完文件后,使用上面这个代码通知客户端,文件已经做好了.

下面我们来看看Client端的OpenCusor都做什么了

  ::send(fd,&idatasize,sizeof(int) , 0 ) ; 
    ::send(fd,ch,idatasize ,0);


    char chm ={0};
    ::recv( fd , &chm , 1 , 0   ) ;
  • 发送idatasize
  • 发送真实内容
  • 等待server侧做好文件后的通知

之后就是双方都进行Fetch。客户端是读,sever是写.

补充:
其实整个过程完全是TCP的握手的过程。体会一下就知道了。
另外,由于代码不是真正的使用代码,建议Server每次调试时都重新启动一次。
例如,第一次调试用的是 test.exe 10.10.93.67 2000,第二次改成test.exe 10.10.93.67 2001
这是因为Server进程结束之后,其实他所创建的Socket并不一定关闭了,而是处于TIME_WAIT的状态,再次使用同一port可能有问题.
Client代码建议使用Fetch3()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值