当前位置:首页 > 李娜多媒体网络通信技术
图5 图像数据帧发送流程图
图6 图像数据帧接收流程图
音频信号是一维信号,音频数据的收发更为简单,在这里就不作具体分析。
3系统具体设计
3.1呼叫处理
3.1.1呼叫处理模块
在实现语音视频聊天时,采用的是基于UDP套接字的点对点模式,而UDP面向的是无连接的数据服务,其套接字的使用如图7所示。
图7 UDP套接字的使用
3.1.2呼叫处理关键代码
客户端请求连接线程(呼叫处理)关键代码如下: DWORD WINAPI ConnectThreadFunc(LPVOID pParam) {
CChatRoomDlg *pChatRoom = (CChatRoomDlg *)pParam; ASSERT(pChatRoom ! = NULL);
pChatRoom ->m_ConnectSock = socket (AF_INET ,SOCK_STREAM , IPPROTO_TCP); if ( pChatRoom->m_ConnectSock == INVALID_SOCKET) { AfxMessageBox(_T(\新建Socket 失败! \
return FALSE; }
CString strServIp;
pChatRoom->GetDlgItemText(IDC_IP_ADDR, strServIp); int iPort = pChatRoom ->GetDlgItemInt (IDC_CONNECT_PORT); if( iPort <= 0 || iPort > 65535 ) {
AfxMessageBox(_T(\请输入合适的端口:1 - 65535\goto __Error_End; }
char szIpAddr[16] = {0}; USES_CONVERSION;
strcpy_s(szIpAddr, 16, T2A(strServIp)); sockaddr_in server;
server.sin_family = AF_INET; server.sin_port = htons(iPort);
server.sin_addr.s_addr = inet_addr(szIpAddr);
if(connect(pChatRoom->m_ConnectSock,(struct sockaddr*)&server, sizeof(struct sockaddr)) == SOCKET_ERROR ) {
AfxMessageBox(_T(\连接失败,请重试! \goto __Error_End; }
pChatRoom->ShowMsg(_T(\系统信息: 连接服务器成功! \while( TRUE ) {
if ( SOCKET_Select(pChatRoom->m_ConnectSock) ) { TCHAR szBuf[MAX_BUF_SIZE] = {0};
int iRet = recv (pChatRoom->m_ConnectSock, (char*)szBuf, MAX_BUF_SIZE, 0); if ( iRet > 0 ) {
pChatRoom->ShowMsg(szBuf);
共分享92篇相关文档