1. 程式人生 > >**c++基於tcp協議的socket程式設計實現一個簡單伺服器**

**c++基於tcp協議的socket程式設計實現一個簡單伺服器**

c++基於tcp協議的socket程式設計實現一個簡單伺服器
基於tcp的通訊,可以利益socket套接字實現。通訊,顧名思義需要伺服器和客戶端兩者進行資訊互動。
在這裡插入圖片描述
通過流程圖我們可以看到程式設計實現伺服器和客戶端的步驟大致相同,而伺服器則更為複雜一些。本文之給出了一個簡單的伺服器程式設計和基本思想

一、建立伺服器套接字(create)。

二、伺服器套接字進行資訊繫結(bind),並開始監聽連線(listen)。

三、接受來自使用者端的連線請求(accept)。

#include <stdio.h>
#include <WinSock2.h>
#include <ws2tcpip.h> //兩個處理協議
#include <string.h>
#pragma comment(lib,"ws2_32.lib)
int main(int argc,char* argv[])
{
//初始化socket
WORD sockVersion=MAKEWORD(2,2);
WSADATA wsaData;
if(0!=WSAStartup(sockVersion,&wsaData))
return 0;
}
//建立套接字
SOCKET slisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(slisten==INVALID_SOCKET)
{
    printf("sccket error");
    return 0;
}

//伺服器繫結IP和埠
sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(80);  //設定埠 網頁80
sin.sin_addr.S_un.S_addr=INADDR_ANY;
if(bind(slisten,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
{
    printf("bind error");
}

//開始監聽,等待接收
if(listen(slisten,5)==SOCKET_ERROR)
{
    printf("listen error");
    return 0;
}

SOCKET sClient;
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char revData[1024];

while(1)
{
    printf("等待接收....\n");
    sClient = accept(slisten,(SOCKADDR*)&remoteAddr,&nAddrlen);
    if(sClient==INVALID_SOCKET)
    {
        printf("accept error");
        continue;
    }

    char sendBuf[20]= {'\0'};
    memcpy(&sin.sin_addr,(void*)&remoteAddr.sin_addr,sizeof((void*)&remoteAddr.sin_addr));
    printf("收到一個連線%s\n",inet_ntoa(sin.sin_addr));
}
return 0
}

在這裡插入圖片描述