Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
DSocket.cpp
Package: meeting_video_system.rar [view]
Upload User: panstart
Upload Date: 2022-04-12
Package Size: 199k
Code Size: 7k
Category:
VOIP program
Development Platform:
C++ Builder
- ////////////////////////////////////////////////////////////////////////////
- //
- //
- // Project : VideoNet version 1.1.
- // Description : Peer to Peer Video Conferencing over the LAN.
- // Author : Nagareshwar Y Talekar ( nsry2002@yahoo.co.in)
- // Date : 15-6-2004.
- //
- //
- // File description :
- // Name : DSocket.cpp
- // Details : Datagram Socket for communication
- //
- //
- // *** Control Packet Format ***
- // Type : 1 byte
- // Length of hostname : 1 byte
- // Hostname : <var>
- //
- // *** Text packet format ***
- // Type : 1 byte
- // Length of hostname : 1 byte
- // Hostname : < var>
- // Length of message : 2 byte
- // Message : <var>
- //
- // *** Audio packet format ***
- // Type : 1 byte
- // Length of hostname : 1 byte
- // Hostname : < var>
- // size of audio data : 2 byte
- // Audio data : <var>
- //
- // *** Video packet format ***
- // Type : 1 byte
- // Length of hostname : 1 byte
- // Hostname : < var>
- // size of video data : 2 byte
- // Video data : <var>
- //
- //
- //
- /////////////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "VideoNet.h"
- #include "DSocket.h"
- #include "VideoNetDlg.h"
- #include "RequestDlg.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // DSocket
- // Initialize static members...
- char DSocket::remoteaddress[500]="";
- char DSocket::remotename[500]="";
- unsigned char DSocket::data[2000];
- unsigned char DSocket::vdata[30000];
- unsigned char DSocket::adata[5000];
- unsigned int DSocket::length=2000;
- unsigned int DSocket::vlength=30000;
- unsigned int DSocket::alength=5000;
- DSocket::DSocket()
- {
- }
- DSocket::~DSocket()
- {
- }
- // Do not edit the following lines, which are needed by ClassWizard.
- #if 0
- BEGIN_MESSAGE_MAP(DSocket, CSocket)
- //{{AFX_MSG_MAP(DSocket)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- #endif // 0
- /////////////////////////////////////////////////////////////////////////////
- // DSocket member functions
- /**
- * Creates datagram socket on specified port
- * @param port Port on which datagram socket is created
- * @param type type indicates the purpose of this socket
- * which can be control, audio or video.
- */
- void DSocket::CreateSocket(int port,int dtype)
- {
- this->Create(port,SOCK_DGRAM);
- type=dtype;
- // Get host name...
- gethostname(localname,300);
- }
- void DSocket::SetParent(CDialog *dlg)
- {
- pdlg=dlg;
- }
- /**
- * Invoked when any data arrives from the remote host
- *
- */
- void DSocket::OnReceive(int errcode)
- {
- CString address;
- char hname[400],str[1000],mesg[500];
- unsigned int port,retvalue;
- int n,len;
- RequestDlg rdlg(NULL);
- // Note : if no error has occured then RETVALUE contains
- // the COUNT of actual bytes received.
- // Control type
- if(type==TYPE_CONTROL)
- {
- retvalue=this->ReceiveFrom(data,length,address,port);
- if(retvalue==SOCKET_ERROR)
- return;
- // Get host name from the data.
- for(int i=0;i<data[1];i++)
- hname[i]=data[i+2];
- hname[i]=0;
- strcpy(remotename,hname);
- strcpy(remoteaddress,(LPCTSTR)address);
- switch(data[0])
- {
- // action : Remote user has sent the invitation for conference
- // reaction : accept/reject the invitation
- case MESG_CONNECT:
- // display the accept , reject dialog box
- rdlg.SetParameter(remotename,remoteaddress,pdlg);
- rdlg.DoModal();
- return;
- // action : Remote user has disconnected
- // reaction : destroy the conference
- case MESG_DISCONNECT:
- ( (CVideoNetDlg*)pdlg)->DestroyConference();
- sprintf(str,"User %s has disconnected",hname);
- AfxMessageBox(str);
- return;
- // action : Remote user has accepted the invitation
- // reaction : start the conference
- case MESG_ACCEPT:
- AfxMessageBox("User has accepted the connection");
- ( (CVideoNetDlg*)pdlg)->StartConference();
- return;
- // action : Remote user has rejected the invitation
- // reaction : what to do...?
- case MESG_REJECT:
- sprintf(str,"User %s has rejected your invitation",hname);
- AfxMessageBox(str);
- return;
- }
- return;
- }
- if(type==TYPE_AUDIO)
- {
- retvalue=this->ReceiveFrom(adata,alength,address,port);
- if(retvalue==SOCKET_ERROR)
- return;
- // Play the audio
- ((CVideoNetDlg *)pdlg)->play->PostThreadMessage(WM_PLAYSOUND_PLAYBLOCK,retvalue,(LPARAM)adata);
- return;
- }
- if(type==TYPE_VIDEO)
- {
- retvalue=this->ReceiveFrom(vdata,vlength,address,port);
- if(retvalue==SOCKET_ERROR)
- return;
- ((CVideoNetDlg *)pdlg)->DisplayRemoteFrame(vdata,retvalue);
- return;
- }
- if(type==TYPE_TEXT)
- {
- retvalue=this->ReceiveFrom(data,length,address,port);
- if(retvalue==SOCKET_ERROR)
- return;
- // Get host name from the data.
- // Length of username
- n=data[1];
- for(int i=0;i<n;i++)
- hname[i]=data[i+2];
- hname[i]=0;
- len=data[n+2] | ( data[n+3]<<8 );
- memcpy(mesg,&data[n+4],len);
- mesg[len]=0;
- sprintf(str,"%s >> %s ",hname,mesg);
- // Display message in list box
- ((CVideoNetDlg *)pdlg)->DisplayMesg(str);
- return;
- }
- }
- /**
- * Send the control data to remote host
- *
- *
- */
- void DSocket::SendControlMessage(int type,char *address)
- {
- char data[1000];
- int n;
- // Prepare the data packet
- // Type of control packet
- data[0]=type;
- // Length of hostname
- n=strlen(localname);
- data[1]=n;
- // Name of the sender host
- memcpy(&data[2],localname,n);
- if(address==NULL)
- {
- SendTo(data,n+2,PORT_CONTROL,remoteaddress);
- }
- else
- {
- SendTo(data,n+2,PORT_CONTROL,address);
- }
- }
- /**
- * Send the audio data to remote host
- *
- */
- void DSocket::SendAudioData(unsigned char *data,int length)
- {
- SendTo(data,length,PORT_AUDIO,remoteaddress);
- }
- /**
- * Send the VIDEO data to remote host
- *
- */
- void DSocket::SendVideoData(unsigned char *data,int length)
- {
- // Better to attach video header....
- // If dynamic format is supported...
- SendTo(data,length,PORT_VIDEO,remoteaddress);
- }
- /**
- * Send the TEXT data to remote host
- *
- */
- void DSocket::SendTextData(unsigned char *data,short length)
- {
- unsigned char *packet=new unsigned char[length+500];
- int n;
- // Text message
- packet[0]=TYPE_TEXT;
- // Length of hostname
- n=strlen(localname);
- packet[1]=n;
- // Hostname
- memcpy(&packet[2],localname,n);
- // Data length
- packet[n+2]=(unsigned char) length;
- packet[n+3]=(unsigned char) (length>>8);
- // Data
- memcpy(&packet[n+4],data,length);
- SendTo(packet,n+4+length,PORT_TEXT,remoteaddress);
- }
- /**
- * Closes the socket created by the createsocket method
- *
- */
- void DSocket::CloseSocket()
- {
- DSocket::Close();
- }