是用WSASocket,WSAAccept那些的。

解决方案 »

  1.   

    其实和用 socket、send、recv 等函数写的程序没有什么区别,这种例子很多。
      

  2.   

    怎么就没有人回复呢?winsock2真的很少用吗?
      

  3.   

    服务器端:
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
    #include <iostream.h>
    void main()
    {
    int sock,sock_trs;
    struct sockaddr_in sa_s,sa_c;
    int sa_len;
    WSABUF MyData;
    char buffer[100];
    DWORD a,b;
    OVERLAPPED Overlapped;
    sa_s.sin_addr.s_addr=htonl(INADDR_ANY);
    sa_s.sin_family=AF_INET;
    sa_s.sin_port=htons(6060);
    sa_len=sizeof(struct sockaddr_in);
    memset(buffer,0,sizeof(buffer)); MyData.len =100;
    MyData.buf =buffer;

    WSADATA wsaData;  int nRet = WSAStartup(WINSOCK_VERSION, &wsaData);
     if(!nRet && wsaData.wVersion == WINSOCK_VERSION)
    sock=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
     bind(sock,(struct sockaddr *)&sa_s,sa_len);
     listen(sock,5);
     if((sock_trs=WSAAccept(sock,(struct sockaddr *)&sa_c,&sa_len,NULL,0))==SOCKET_ERROR)
     cout<<"accept error"<<endl;
     else
     cout<<"accept ok"<<endl;
     if(WSARecv(sock_trs,&MyData,1,&a,0,&Overlapped,NULL)==SOCKET_ERROR)
    //  if(recv(sock_trs,buffer,100,0)==SOCKET_ERROR)
     {
     cout<<"recv error"<<endl<<"error code:"<<WSAGetLastError()<<endl;
     }
    cout<<"Data Buffer:"<<buffer <<endl;
    for(b=0;b<1000000;b++)
    cout<<"";
    } 客户端:
    #include <winsock2.h>
    #pragma comment(lib, "ws2_32.lib")
    #include <iostream.h>
    //#include "defines.h"void main()
    {
    WSABUF MyData;
    DWORD a,b;
    OVERLAPPED Overlapped;
    char msg[100]="abcdefg\0";
    int sock,sock_trs;
    struct sockaddr_in sa_s,sa_c;
    int sa_len;
    sa_c.sin_addr.s_addr=inet_addr("127.0.0.1");
    sa_c.sin_family=AF_INET;
    sa_c.sin_port=htons(6060);
    sa_len=sizeof(sa_c); MyData.buf =msg;
    MyData.len =strlen(msg);
    // cout<<MyData.buf <<endl; WSADATA wsaData;
        int nRet = WSAStartup(WINSOCK_VERSION, &wsaData);
        if(!nRet && wsaData.wVersion == WINSOCK_VERSION)
    sock=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);

    if(WSAConnect(sock,(struct sockaddr *)&sa_c,sa_len,0,0,0,0)==-1)
    cout<<"connect error"<<endl;
    if(WSASend(sock,&MyData,1,&a,0,&Overlapped,NULL)==SOCKET_ERROR)
    // if(send(sock,msg,100,0)==SOCKET_ERROR)
    {
    cout<<"send error"<<endl;
    cout<<"error code:"<<WSAGetLastError()<<endl;
    }
    for(b=0;b<1000000;b++)
    cout<<"";
    }
    但是WSASend(),WSARecv()函数使用还是有错,用send(),recv()就没有问题。谁能修改一下使WSASend(),WSARecv()可用?
      

  4.   

    可以吗?
    Client不用bind吗?
    我初学的,问一下,不用bind吗?