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