现在有以客户端,需要增加一个协议,将一个已知字符串作为事件ID上传到已知服务器的指定端口,请帮我打一个模板,把整个步骤体现出来,重要的是要有注释,能明白整个流程,让我能依样画葫芦就行,请务必写得明白些简单些,要求很简单只要传一个字符串让服务器知道那个字符串就行了,一定要帮我写啊,不要copy啊,写得明白我加分,注意啊,我是socket小菜,什么都不懂啊

解决方案 »

  1.   

    www.vckbase.com
    www.codeproject.com
    www.codeguru.com
    上面有好多例子,自己下载一个研究哈。
      

  2.   

    补充一下,是TCP的,西诶邪恶
      

  3.   


    /**********************************************/
    companyname                        foo     
    protocol vertion                      1.0
    contentlength                         10  // how many char ?
    eventid                                    run that X
    /**********************************************/foo\n1.0\n10\nrun that X\n这个就是你要发的包
      

  4.   

    我有些没怎么明白你的意思.你知道不知道你已有服务器的事件id之类的,我把两端大概都给你写出来吧...
    /*初始化套接字*/
    #define MyId 10
    WSAData wsadat;                                       
    short int Port = 8080;                     //服务器端口
    WSAStartup(MAKEWORD(2,2),& wsadat);        //socket版本协商
    SOCKET nsocket = socket(AF_INET, SOCK_STREAM, 0);//0表示tcp,也就是IPPROTO_TCP
    SOCKADDR_IN sockaddr;
    memset((void*)& sockaddr,0,sizeof(sockaddr));
    sockAddr.sin_family=AF_INET;
    sockAddr.sin_port=htons(Port);             
    sockAddr.sin_addr.s_addr=inet_addr("服务器地址");
    /*初始化完毕*/
    connect (nsocket,(SOCKADDR*)&sockaddr , sizeof(sockaddr));   //连接
    send(nsocket,(char*)& MyId ,sizeof(MyId ),0);                //发送这个任务ID.
    /*下面就转到另一边去...就是接收端,跟上面差不多的,也是先初始化*/
    #define MyId 10
    WSADATA wsa;
    SOCKADDR_IN cAdress;
    WSAStartup(MAKEWORD(2,2),&wsa);
    Myclient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

    cAdress.sin_family = AF_INET;
    cAdress.sin_port = htons(port);             //设置一个监听端口
    cAdress.sin_addr.S_un.S_addr = htons(INADDR_ANY);
    bind(Myclient,(SOCKADDR*)&cAdress,sizeof(cAdress));   //绑定socket
    listen(Myclient,1987);             //监听port哪个地方的端口,1987表示允许的连接数最多为1987个
    SOCKET Rsocket = accept(Myclient,(sockaddr *)&cAdress,&len)    //等待接收连接
    /*然后在下面就接收数据*/
    char strRecvData[1024] = {0};
    recv(Rsocket , strRecvData,sizeof(strRecvData),0); //如果有数据就保存到strRecvData里面了. 
    /*判断指令*/
    switch(MyId )
    {
     case 10:
       //指令接收到了,就做你自己的工作了.
       ... 
      break;
     case 11:
      ....
    }
    这就是大概流程,我也是个个菜鸟.呵呵..希望能提供一点点帮助.凭记忆写的..有些乱.但流程没错
      
      

  5.   

    任务还没派下来,客服就在催了,是多么急的,还是 hacksouls 理解菜鸟,谢谢,我在调试一个小错误