用VC++ API模式编写一个基于IP/TCP协议的服务器端与客户端通信的程序

解决方案 »

  1.   

    客户端:
    #pragma comment(lib,"ws2_32.lib")
    #include<winsock2.h>
    #include<stdio.h>
    void main()
    {
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2),&wsaData);
    SOCKET connSock=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN servAddr;
    servAddr.sin_family=AF_INET;
    servAddr.sin_port=htons(9878);
    servAddr.sin_addr.s_addr=inet_addr("127.0.0.1");connect(connSock,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN));
    char buf[11];
    recv(connSock,buf,11,0);
    printf("%s",buf);
    }服务器端:#pragma comment(lib,"ws2_32.lib")
    #include<winsock2.h>
    void main()
    {
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2),&wsaData);
    SOCKET servSock,cliSock;
    SOCKADDR_IN servAddr;
    servAddr.sin_family=AF_INET;
    servAddr.sin_port=htons(9878);
    servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
    servSock=socket(AF_INET,SOCK_STREAM,0);
    bind(servSock,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN));
    listen(servSock,5);
    while(true)
    {
    cliSock=accept(servSock,NULL,NULL);
    send(cliSock,"hello world",11,0);
    }
    }
      

  2.   

    #include<winsock.h>
    #include"resource.h"
    #include"Chat_RoomC.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
     LPSTR lpCmdLine,int nCmdShow)
    {
    DialogBox(hInstance,(LPCTSTR)"DIALOG1",NULL,(DLGPROC)Hostname_ipDlgPro);

    return(TRUE);
    }
    BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,
    WPARAM wParam,LPARAM lParam)
    {
    switch(message)
    {
    case WM_INITDIALOG:
    WSA_return=WSAStartup(0x0002,&WSAData);
    if(WSA_return!=0)
    {
    MessageBox(NULL,"初始化失败!","警告!",MB_OK);
    WSACleanup();
    }
    if(client_hSocket!=0)
    {
    closesocket(client_hSocket);
    client_hSocket=0;
    }
    if(client_hSocket==0)
    {

    if((client_hSocket=socket(AF_INET,SOCK_DGRAM,0))==SOCKET_ERROR)
    MessageBox(NULL,"建立套接字失败!","警告!",MB_OK);

    }
    return TRUE; case WM_COMMAND:

    switch(LOWORD(wParam))
    {
    case IDC_IPADDRESS:
    if(HIWORD(wParam)==EN_CHANGE)
    {
    GetDlgItemText(hDlg,IDC_IPADDRESS,IP_String,20);

    }
    break;

    case IDC_INPUTTEXT:
    if(HIWORD(wParam)==EN_CHANGE)
    {
    GetDlgItemText(hDlg,IDC_INPUTTEXT,Input_Text,256);

    }
    break;
    case IDC_SEND:
    client_addr.sin_family=AF_INET;
    client_addr.sin_addr.S_un.S_addr=inet_addr(IP_String);

    client_uPort=GetDlgItemInt(hDlg,IDC_PORTTEXT,&bErr,TRUE);
    client_addr.sin_port=htons((u_short)client_uPort);

    sendto(client_hSocket,Input_Text,256,0,(LPSOCKADDR)&client_addr,sizeof(client_addr));
    break;

    case IDCANCEL:
    closesocket(client_hSocket);
    WSACleanup();
    EndDialog(hDlg,TRUE);
    return(TRUE);

    }
    }
    return(FALSE);
    }
      

  3.   

    #include<winsock.h>
    #include"resource.h"
    #include"Chat_RoomS.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
     LPSTR lpCmdLine,int nCmdShow)
    {

    DialogBox(hInstance,(LPCTSTR)"DIALOG1",NULL,(DLGPROC)Hostname_ipDlgPro);


    return(TRUE);
    }
    BOOL APIENTRY Hostname_ipDlgPro(HWND hDlg,UINT message,
    WPARAM wParam,LPARAM lParam)
    { switch(message)
    {
    case WM_INITDIALOG:
    return(TRUE); case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDC_SETSERVER:
    WSA_return=WSAStartup(0x0002,&WSAData);
    if(WSA_return!=0)
    {
    MessageBox(NULL,"初始化失败!","警告!",MB_OK);
    WSACleanup();
    }
    if(server_hSocket!=0)
    {
    closesocket(server_hSocket);
    server_hSocket=0;
    }
    if(server_hSocket==0)
    {

    if((server_hSocket=socket(AF_INET,SOCK_DGRAM,0))==SOCKET_ERROR)
    MessageBox(NULL,"建立套接字失败!","警告!",MB_OK);

    }

    server_addr.sin_family=AF_INET;
    server_addr.sin_addr.S_un.S_addr=INADDR_ANY;

    server_uPort=GetDlgItemInt(hDlg,IDC_PORTUINT,&server_bErr,TRUE);
    server_addr.sin_port=htons((u_short)server_uPort); if(bind(server_hSocket,(LPSOCKADDR)&server_addr,sizeof(server_addr))==SOCKET_ERROR)
    MessageBox(NULL,"绑定端口失败!","警告",MB_OK);
    return(TRUE);
    case IDC_RECEIVE:
    recvfrom(server_hSocket,Output_Text,256,0,(LPSOCKADDR)&server_addr,&fromlen);
    SetDlgItemText(hDlg,IDC_INPUTTEXT,Output_Text);
    return(TRUE);

    case IDCANCEL:
    closesocket(server_hSocket);
    WSACleanup();
    EndDialog(hDlg,TRUE);
    return(TRUE);

    }
    }
    return(FALSE);
    }
      

  4.   

    呵呵,来晚了楼主可以到www.vckbase.com上面有好多的基本例子
      

  5.   

    先了解socket通信的服务端和客户端的过程
      

  6.   

    服务器端和客户端都有一个固定格式的,按照来做就行了。
    比如server端: socket(), bind(), listen(), accept(), send or recv
    写个简单的网络通信程序还是比较简单的:)