zoukankan      html  css  js  c++  java
  • 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
    ", inet_ntoa(client.sin_addr),    
                ntohs(client.sin_port));    
                     
        while (TRUE) {    
            ret = recv(sClient, szMessage, MSGSIZE, 0);    
            szMessage[ret] = '';    
            printf("Received [%d bytes]: '%s'
    ", 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方式是服务器实时播放,因需而定。 
  • 相关阅读:
    <SpringMvc>入门二 常用注解
    <SpringMvc>入门一 HelloWorld
    <MyBatis>入门六 动态sql
    <MyBatis>入门五 查询的返回值处理
    <MyBatis>入门四 传入的参数处理
    <MyBatis>入门三 sqlMapper文件
    <MyBatis>入门二 全局配置文件
    <MyBatis>入门一 HelloWorld
    类和类的继承(6)
    python 的重载
  • 原文地址:https://www.cnblogs.com/as3lib/p/3744872.html
Copyright © 2011-2022 走看看