C++系統(tǒng)相關(guān):基于TCP的網(wǎng)絡(luò)通信程序演示

字號:

本程序僅僅是為了演示基于TCP協(xié)議的網(wǎng)絡(luò)通信程序的寫法,采用阻塞模式,代碼簡單:
    服務(wù)器端代碼:
    #include "Winsock2.h"
    #include "stdio.h"
    void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD(1,1);
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 )
    {
    return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 1 ||
    HIBYTE( wsaData.wVersion ) != 1 )
    {
    WSACleanup( );
    return;
    }
    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(6000);
    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
    listen(sockSrv,5);
    SOCKADDR_IN addrClient;
    int len=sizeof(SOCKADDR);
    while(1)
    {
    SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
    char sendBuf[100];
    sprintf(sendBuf,"Welcom %s to http://blog.hulin0229.com", inet_ntoa(addrClient.sin_addr));
    send(sockConn,sendBuf,strlen(sendBuf)+1,0);
    char recvBuf[100];
    recv(sockConn,recvBuf,strlen(recvBuf),0);
    printf("%s\n",recvBuf);
    closesocket(sockConn);
    }
    }
    『注意』本程序使用了動態(tài)連接庫文件Ws2_32.lib,需要在工程屬性里添加對Ws2_32.lib的連接。本程序用VC2005編譯,添加方法是:在project\Configuration properties\Linker\Input下的Additional Dependencies 項里寫如Ws2_32.lib
    客戶端代碼:
    #include "Winsock2.h"
    #include "stdio.h"
    void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD(1,1);
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 )
    {
    return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 1 ||
    HIBYTE( wsaData.wVersion ) != 1 )
    {
    WSACleanup( );
    return;
    }
    SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //127.0.0.1是一個回路地址。
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(6000);
    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
    char recvBuf[100];
    recv(sockClient,recvBuf,strlen(recvBuf),0);
    printf("%s\n",recvBuf);
    send(sockClient,"我是胡林",strlen("我是胡林")+1,0);
    closesocket(sockClient);
    WSACleanup();
    }
    同服務(wù)器端一樣,客戶端程序也使用了Ws2_32.lib動態(tài)連接庫,需要在工程屬性里添加對Ws2_32.lib的連接