c实现windows socket

服务端代码:

/*    
 * testSocketService.c    
 *    
 *  Created on: 2012-8-16    
 *      Author: 皓月繁星    
 */
#include <WINSOCK2.H> 
#include <stdio.h>   
                  
#define PORT           5150  
#define MSGSIZE        1024  
                 
#pragma comment(lib, "ws2_32.lib")    
                 
int main()    
{    
    WSADATA wsaData;    
    SOCKET sListen;    
    SOCKET sClient;    
    SOCKADDR_IN local;    
    SOCKADDR_IN client;    
    char szMessage[MSGSIZE];    
    int ret;    
    int iaddrSize = sizeof(SOCKADDR_IN);    
    WSAStartup(0x0202, &wsaData);    
                 
    sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    
                 
    local.sin_family = AF_INET;    
    local.sin_port = htons(PORT);    
    local.sin_addr.s_addr = htonl(INADDR_ANY);    
    bind(sListen, (struct sockaddr *) &local, sizeof(SOCKADDR_IN));    
                 
    listen(sListen, 1);    
                 
    sClient = accept(sListen, (struct sockaddr *) &client, &iaddrSize);    
    printf("Accepted client:%s:%d\n", inet_ntoa(client.sin_addr),    
            ntohs(client.sin_port));    
                 
    while (TRUE) {    
        ret = recv(sClient, szMessage, MSGSIZE, 0);    
        szMessage[ret] = '\0';    
        printf("Received [%d bytes]: '%s'\n", ret, szMessage);    
    }    
    return 0;    
  }

  

客户端代码

/*    
 * testSocketClient.c    
 *    
 *  Created on: 2012-8-16    
 *      Author: 皓月繁星    
 */
#include <WINSOCK2.H> 
#include <stdio.h>   
                  
//定义程序中使用的常量    
#define SERVER_ADDRESS "127.0.0.1" //服务器端IP地址    
#define PORT           5150         //服务器的端口号    
#define MSGSIZE        1024         //收发缓冲区的大小    
#pragma comment(lib, "ws2_32.lib")    
                 
int main()    
{    
    WSADATA wsaData;    
    //连接所用套节字    
    SOCKET sClient;    
    //保存远程服务器的地址信息    
    SOCKADDR_IN server;    
    //收发缓冲区    
    char szMessage[MSGSIZE];    
    //成功接收字节的个数    
    int ret;    
                 
    // Initialize Windows socket library    
    WSAStartup(0x0202, &wsaData);    
                 
    // 创建客户端套节字    
    sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //AF_INET指明使用TCP/IP协议族;    
                                                         //SOCK_STREAM, IPPROTO_TCP具体指明使用TCP协议    
    // 指明远程服务器的地址信息(端口号、IP地址等)    
    memset(&server, 0, sizeof(SOCKADDR_IN)); //先将保存地址的server置为全0    
    server.sin_family = PF_INET; //声明地址格式是TCP/IP地址格式    
    server.sin_port = htons(PORT); //指明连接服务器的端口号,htons()用于 converts values between the host and network byte order    
    server.sin_addr.s_addr = inet_addr(SERVER_ADDRESS); //指明连接服务器的IP地址    
                                                        //结构SOCKADDR_IN的sin_addr字段用于保存IP地址,sin_addr字段也是一个结构体,sin_addr.s_addr用于最终保存IP地址    
                                                        //inet_addr()用于将 形如的"127.0.0.1"字符串转换为IP地址格式    
    //连到刚才指明的服务器上    
    connect(sClient, (struct sockaddr *) &server, sizeof(SOCKADDR_IN)); //连接后可以用sClient来使用这个连接    
                                                                        //server保存了远程服务器的地址信息    
    while (TRUE) {    
        printf("Send:");    
        //从键盘输入    
        gets(szMessage); //The gets() functionreads characters from stdin and loads them into szMessage    
        // 发送数据    
        send(sClient, szMessage, strlen(szMessage), 0); //sClient指明用哪个连接发送; szMessage指明待发送数据的保存地址 ;strlen(szMessage)指明数据长度    
    }    
                 
    // 释放连接和进行结束工作    
    closesocket(sClient);    
    WSACleanup();    
    return 0;    
}

 http://www.docin.com/p-111227070.html

Java mina和c++ ace做socket长连接 测试报告:

http://www.iteye.com/problems/44682

c++ RTMP server 做流媒体的

 流媒体研究博客:http://www.cnblogs.com/haibindev

http://www.rtmpd.com/

https://www.google.com.hk/#newwindow=1&q=rtmpc%2B%2B&safe=strict

 用HTTP方式:先通过IIS 将FLV下载到本地缓存,然后再通过NetConnection的本地连接来播放这个FLV,这种方法是播放本地的视频,并不是播放服务器的视频。因此在本地缓存里可以找到这个FLV。其优点就是服务器下载完这个FLV,服务器就没有消耗了,节省服务器消耗。其缺点就是FLV会缓存在客户端,对FLV的保密性不好。

用RTMP方式:通过NetConnection连接到FMS/Red5服务器,并实时播放服务器的FLV文件,这种方式可以任意选择视频播放点(SEEK()),并不象HTTP方式需要缓存完整个FLV文件到本地才可以任意选择播放点,其优点就是在本地缓存里是找不到这个FLV文件的。其优点就是FLV不会缓存在客户端,FLV的保密性好,其缺点就是消耗服务器资源,连接始终是实时的。

一句话,HTTP方式是本地播放,RTMP方式是服务器实时播放,因需而定。 

posted on 2014-05-22 04:08  防空洞123  阅读(444)  评论(0编辑  收藏  举报

导航