socket的用戶端和服務端(Windows控制台程式)

來源:互聯網
上載者:User

標籤:

首先是兩個程式,分別是socket的用戶端和服務端。(在windows系統vc6.0編譯)
伺服器端:
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.lib")
void main()
{
    WSADATA wsd;
    SOCKET server;                                            //伺服器socket
    SOCKADDR_IN addrSrv;    
    char sendBuf[100];
    char recvBuf[100];
    SOCKADDR_IN addrClient;
    SOCKET client;                                            //串連的用戶端socket
    int len;
    if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
    {
        printf("start up failed!\n");
        return ;
    }
    server=socket(AF_INET,SOCK_STREAM,0);                    //建立socket
    addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);            //設定地址
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(6000);                            //設定連接埠號碼
    bind(server,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));        //綁定
    listen(server,5);                                        //設定最多串連數
    len=sizeof(SOCKADDR);
    while(1)
    {
        client=accept(server,(SOCKADDR*)&addrClient,&len);    //接收用戶端串連
        sprintf(sendBuf,"Welcome %s ",
        inet_ntoa(addrClient.sin_addr));
        send(client,sendBuf,strlen(sendBuf)+1,0);            //發送資訊用戶端
        recv(client,recvBuf,100,0);                            //接收用戶端資料
        printf("%s\n",recvBuf);
        closesocket(client);
    }
    closesocket(client);                                    //關閉串連
    WSACleanup();
}
用戶端:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.lib")
void main()
{
    WSADATA wsd;
    SOCKET sockClient;                                            //用戶端socket
    SOCKADDR_IN addrSrv;
    char recvBuf[100];
    if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
    {
        printf("start up failed!\n");
        return ;
    }
    sockClient=socket(AF_INET,SOCK_STREAM,0);                    //建立socket
    addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(6000);
    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));    //串連伺服器端
    recv(sockClient,recvBuf,100,0);                                //接收伺服器端資料
    printf("%s\n",recvBuf);
    send(sockClient,"hello world",strlen("hello world")+1,0);    //向伺服器端發送資料
    closesocket(sockClient);                                    //關閉串連
    WSACleanup();
}

以上兩個程式只需要簡單的改寫,就可以實現簡單的傳送檔案了。
將用戶端發送的資訊改為發送請求的檔案名稱。
send(sockClient,filename,strlen(filename)+1,0);   
伺服器端接收到檔案名稱:
recv(client,filename,100,0);
伺服器端傳送檔案資訊:
        if((fp=fopen(filename,"rb"))==NULL)closesocket(client);    //請求的檔案不存在,則關閉串連
        n=fread(sendBuf,1,100,fp);
        while(n>0){
            send(client,sendBuf,n,0);            //傳送檔案用戶端
            n=fread(sendBuf,1,100,fp);
        }
用戶端則接收檔案資訊:
if((fp=fopen(filename,"wb"))==NULL)
    {
        return ;
    }
    while((ret=recv(sockClient,recvBuf,100,0))>0)
    {
        fwrite(recvBuf,1,ret,fp);
    }

socket的用戶端和服務端(Windows控制台程式)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.