求助UDP视频传输
客户端代码:
void VideoProcess()
{
sockaddr_in sendVideoClient;
sendVideoClient.sin_family = AF_INET;
sendVideoClient.sin_addr.S_un.S_addr = inet_addr("192.168.192.35");
sendVideoClient.sin_port = htons(atoi("20000"));
int m_len = sizeof(sendVideoClient);
file.Open("e:\\风景.avi",CFile::modeRead);
this->SetShowEditText("开始传输视频!");
char buf[1024];
char *pBuf;
while(TRUE)
{
memset(buf,0,1024);
len = file.Read(buf, 1024);
if(len<=0)
break;
int words = sendto(m_client3, buf, len, 0,(sockaddr*)&sendVideoClient, m_len);
if(SOCKET_ERROR == words)
{
this->SetErrorMessageBox("发送视频数据失败!");
return;
}
}
this->SetShowEditText("视频发送完成!");
UpdateData();
file.Close();
}
服务器端代码:
DWORD WINAPI VideoRecvThread(LPVOID pParam)
{
CFile file;
char recvBuf[VIDEO_LEN] = {0};
CString StrAviFileName = "e:视频\\" + strVideo + ".avi";
//非阻塞设置
int iMode = 1;
ioctlsocket(m_videosocket, FIONBIO, (u_long FAR*)&iMode);
sockaddr_in recvVideoServer;
int len = sizeof(recvVideoServer);
while(TRUE)
{
memset(recvBuf, 0, 1024*sizeof(char));
int buflen = recvfrom(m_videosocket, recvBuf, 1024, 0, (sockaddr*)&recvVideoServer, &len);
if(SOCKET_ERROR == buflen)
{
}
else if(0 == buflen)
{}
else if(0 < buflen)
{
file.Open(StrAviFileName,CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate );
file.SeekToEnd();
file.Write(recvBuf,buflen);
file.Close();
}
}
return 0;
}
一个500多M的视频文件,问什么只传输了几百K,我把socket缓冲区扩到10M,貌似也只传输了10M多就结束了。刚接触传输,不明白如何传视频啊,求助