在局域网中,如何用VC程序向一个台IP为:192.168.0.5,端口为:8000的PC机发送命令.只做单向通讯,只发不收.
刚接触网络通讯的问题,只知道用socket来实现.
问题1.用哪个类来实现?
问题2.具体在VC中出发发送命令的事件后,如何连接和发送?
问题3.能否给些简单的例子?非常感谢您的回复,揭贴给分!

解决方案 »

  1.   

    mfc: CSocket
    recv/sendexample of msdn : CHATSRVR: Demonstrates a Windows Sockets Server
      

  2.   

    是不是固定一方发送,一方接收,留个mail发个给你
      

  3.   

    是的就是固定一方发,一方送,VC程序运行的机器发,那个给定IP的机器收[email protected]
      

  4.   

    不就是基本的网络通信吗 !随便找个例子就行啊!Csocket或CAsyncSocket呗
      

  5.   

    用winsock API吧
    create
    connet
    send
      

  6.   

    本实例使用面向连接协议的客户/服务器模式,其流程如图2.3所示: 服务器方程序: /* File Name: streams.c */ 
    #include 
    #include 
    #define TRUE 1 
    /* 这个程序建立一个套接字,然后开始无限循环;每当它通过循环接收到一个连接,则打印出一个信息。当连接断开,或接收到终止信息,则此连接结束,程序再接收一个新的连接。命令行的格式是:streams */ 
    main( ) 

    int sock, length; 
    struct sockaddr_in server; 
    struct sockaddr tcpaddr; 
    int msgsock; 
    char buf[1024]; 
    int rval, len; 
    /* 建立套接字 */ 
    sock = socket(AF_INET, SOCK_STREAM, 0); 
    if (sock < 0) { 
    perror(“opening stream socket”); 
    exit(1); 

    /* 使用任意端口命名套接字 */ 
    server.sin_family = AF_INET; 
    server.sin_port = INADDR_ANY; 
    if (bind(sock, (struct sockaddr *)&server, sizeof(server)) < 0) { 
    perror(“binding stream socket”); 
    exit(1); 

    /* 找出指定的端口号并打印出来 */ 
    length = sizeof(server); 
    if (getsockname(sock, (struct sockaddr *)&server, &length) < 0) { 
    perror(“getting socket name”); 
    exit(1); 

    printf(“socket port #%d\n”, ntohs(server.sin_port)); 
    /* 开始接收连接 */ 
    listen(sock, 5); 
    len = sizeof(struct sockaddr); 
    do { 
    msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (int *)&len); 
    if (msgsock == -1) 
    perror(“accept”); 
    else do{ 
    memset(buf, 0, sizeof(buf)); 
    if ((rval = recv(msgsock, buf, 1024)) < 0) 
    perror(“reading stream message”); 
    if (rval == 0) 
    printf(“ending connection \n”); 
    else 
    printf(“-->%s\n”, buf); 
    }while (rval != 0); 
    closesocket(msgsock); 
    } while (TRUE); 
    /* 因为这个程序已经有了一个无限循环,所以套接字“sock”从来不显式关闭。然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。*/ 
    exit(0); 

    客户方程序: /* File Name: streamc.c */ #include #include #define DATA “half a league, half a league ...” /* 这个程序建立套接字,然后与命令行给出的套接字连接;连接结束时,在连接上发送 一个消息,然后关闭套接字。命令行的格式是:streamc 主机名 端口号 端口号要与服务器程序的端口号相同 */ main(argc, argv) int argc; char *argv[ ]; { int sock; struct sockaddr_in server; struct hostent *hp, *gethostbyname( ); char buf[1024]; 
    /* 建立套接字 */ sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror(“opening stream socket”); exit(1); } 
    /* 使用命令行中指定的名字连接套接字 */ server.sin_family = AF_INET; hp = gethostbyname(argv[1]); if (hp == 0) { fprintf(stderr, “%s: unknown host \n”, argv[1]); exit(2); } memcpy((char*)&server.sin_addr, (char*)hp->h_addr, hp->h_length); sever.sin_port = htons(atoi(argv[2])); 
    if (connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0) { perror(“connecting stream socket”); exit(3); } 
    if (send(sock, DATA, sizeof(DATA)) < 0) perror(“sending on stream socket”); closesocket(sock); exit(0); }
      

  7.   

    现在都MFC编程了,WIN32 API太麻烦,对新手来说,用简便直观的被封装的MFC编程更好。例如CSocket sock;//定义对象
    sock.Create(0,SOCK_DGRAM,0);//创建&绑定
    sock.SendTo(buff,sizeof(buff),8000,"192.168.0.5",0);//发送数据
    看,很简单吧?
    大概是这个格式,具体的看MSDN吧,CSocket包括他的基类CAsyncSocket一共也没几个成员函数,再往上就是CObjet了。本来嘛,网络编程,就是客服双方一发一收,不是很复杂。
      

  8.   

    TCP/IP Winsock高级编程 
    http://idoorsoft.51.net/tcpip.php