C++ rtmp livestream 流媒体

海阔天空 张翼飞翔

我的学习笔记。--我喜欢这里,因为这里安静,无广告骚扰。
随笔 - 82, 文章 - 2, 评论 - 126, 引用 - 0
数据加载中……

C++ Win32 Socket

Server:
/************************************************************************
/* 
/* 作者: zyf
/* 博客: 
http://www.cnweblog.com/fly2700/                                                     
/***********************************************************************
*/


#include 
<stdio.h>
#include 
<winsock.h>
#pragma comment(lib,
"Wsock32.lib")


void* ThreadRecv(void* param)
{
    SOCKET socketClient 
= (SOCKET)param;

    
char recvbuffer[1024*50];   
    
int nRecv = 0;
    
while(SOCKET_ERROR != nRecv)
    
{
        nRecv 
= recv( socketClient, recvbuffer, sizeof(recvbuffer), 0);   
        printf(
"socket=%d,recv=%d\n",socketClient,nRecv);
        
if(SOCKET_ERROR == nRecv)
        
{
            
break;
        }

        
//send( socketClient, recvbuffer, nRecv, 0);
    }

    
    
//关闭Socket   
    printf("socket=%d,threadClose\n",socketClient);
    closesocket( socketClient);   

    
return NULL;
}


void main()    
{     
    printf(
"server start.\n");

    
//版本协商    
    WORD wVersionRequested;     
    WSADATA wsaData;    
    
int err;   

    sockaddr_in addrClient;    
    
int len = 0;  
    
//int nRecv = 0;
    BOOL bRuning = TRUE;

    
//char sendbuffer[128] = {0};    

    wVersionRequested 
= MAKEWORD(1,1); //0x0101    
    err = WSAStartup(wVersionRequested,&wsaData);    
    
if(0 != err)   
    
{   
        
return;   
    }
   

    
if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)    
    
{   
        WSACleanup();   
        
return;    
    }
   
  
    
//创建Socket     
    SOCKET sockSvr = socket(AF_INET,SOCK_STREAM,0);   
  
    
//创建IP地址和端口    
    SOCKADDR_IN addrSvr;   
    addrSvr.sin_addr.S_un.S_addr 
= htonl(INADDR_ANY);   
    addrSvr.sin_family 
= AF_INET;   
    addrSvr.sin_port 
= htons(6000);   
  
    
//绑定端口监听   
    int ret = bind(sockSvr,(SOCKADDR*)&addrSvr,sizeof(SOCKADDR));    
    
if (0 != ret)
    
{
        printf(
"bind failue.\n");
        closesocket(sockSvr);   
        WSACleanup();
        
return ;
    }

    
    listen(sockSvr,
5); //
    while(bRuning)   
    
{                     
        printf(
"listen.\n");  
        SOCKET socketClient ;
// = new SOCKET();
        len = sizeof(sockaddr); 
        
//阻塞方法,获得一个客户Socket连接  
        socketClient = accept(sockSvr, (sockaddr*)&addrClient, &len);  
        printf(
"accept.\n");         
        CreateThread(NULL, 
0, (LPTHREAD_START_ROUTINE)ThreadRecv, (void*)socketClient, 0, NULL);     
    }
   
  
    closesocket(sockSvr);  
    
//释放Winsock资源
    WSACleanup();
}
  




Client:
/************************************************************************
/* 
/* 作者: zyf
/* 博客: 
http://www.cnweblog.com/fly2700/                                                 
/***********************************************************************
*/


#include 
<stdio.h>
#include 
<winsock.h>
#pragma comment(lib,
"Wsock32.lib")

//unsigned int g_socket;    

BOOL Connect(SOCKET
* pSocket, const char* address, unsigned short int port)
{
    WSADATA Data;
    SOCKADDR_IN destSockAddr;

    
int ret;

    ret 
= WSAStartup(MAKEWORD(11), &Data);
    
if (0 != ret)
    
{
        printf( 
"ERROR: WSAStartup unsuccessful.\n");
        
return FALSE;
    }


    
//创建连向服务器的套接字   
    *pSocket = socket(AF_INET, SOCK_STREAM, 0);
    
    
//创建地址信息   
    destSockAddr.sin_addr.S_un.S_addr = inet_addr(address);
    destSockAddr.sin_port 
= htons(port);
    destSockAddr.sin_family 
= AF_INET;
        
    
//连接服务器 
    printf("Trying to connect to ip:%s\n",address);
    ret 
= connect(*pSocket,(LPSOCKADDR) &destSockAddr, sizeof(destSockAddr));    
    
if (ret == SOCKET_ERROR)
    
{
        printf(
"Connect error=%d.\n",GetLastError());
        WSACleanup();
        
return FALSE;
    }


    
return TRUE;
}



int Send(SOCKET socketConn, const char* buf, int len)
{
    
int nSend = send(socketConn, buf, len, 0);
    printf(
"socket=%d,send=%d\n",socketConn, nSend);
    
//char bufRecv[BUFSIZ] = {0};
    
//int nRecv = recv(g_socket, bufRecv, sizeof(bufRecv), NO_FLAGS_SET);
    /*
    for(int i=0; i<nRecv; i++)
    {
        printf("%c",bufRecv[i]);
    }
    printf("recv=%d",nRecv);
    
*/

    
return nSend;
}



int main()
{
    
char strSend1[] = {"hellow1"};
    
char strSend2[] = {"hellow2"};

    printf(
"client start.\n");
    SOCKET socketConn;
    
if(!Connect(&socketConn, "127.0.0.1"6000))//服务器127.0.0.1 端口6000
    {
        printf(
"connect failue.\n");
        
return 0;
    }

    
//连续发生二个小包 会有粘包现象。
    Send(socketConn, strSend1, sizeof(strSend1));
    Send(socketConn, strSend2, sizeof(strSend2));

    printf(
"end.\n");
    getchar();
    
    
return 0;
}

posted on 2010-07-17 12:31 ZhangEF 阅读(780) 评论(0)  编辑  收藏 所属分类: Code