现在使用sendto函数可以实现发送,函数是这样子的:
retval=sendto(m_socket,((PWAVEHDR) lParam)->lpData,((PWAVEHDR) lParam)->dwBytesRecorded,0,
(SOCKADDR*)&addrto1,sizeof(SOCKADDR));
问题是一直接收失败,接收函数是这样子的:
retval=recvfrom(sock,(char *)theApp.tempBuf,sizeof(theApp.tempBuf),0,(SOCKADDR*)&addrFrom,&len);
其中theApp.tempBuf是在APP类里这样定义的:PBYTE tempBuf;初始化为: tempBuf = reinterpret_cast<PBYTE>(malloc(1));主要是用它来保存接收到的音频数据,因为在其它函数里还要用到,就定义为全局的了。不知这样可行不?
如果不可以的话,请大侠们指点指点,非常感谢!
retval=sendto(m_socket,((PWAVEHDR) lParam)->lpData,((PWAVEHDR) lParam)->dwBytesRecorded,0,
(SOCKADDR*)&addrto1,sizeof(SOCKADDR));
问题是一直接收失败,接收函数是这样子的:
retval=recvfrom(sock,(char *)theApp.tempBuf,sizeof(theApp.tempBuf),0,(SOCKADDR*)&addrFrom,&len);
其中theApp.tempBuf是在APP类里这样定义的:PBYTE tempBuf;初始化为: tempBuf = reinterpret_cast<PBYTE>(malloc(1));主要是用它来保存接收到的音频数据,因为在其它函数里还要用到,就定义为全局的了。不知这样可行不?
如果不可以的话,请大侠们指点指点,非常感谢!
到底要收多少个字节?
int recvfrom (
SOCKET s,
char FAR* buf,
int len,
int flags,
struct sockaddr FAR* from,
int FAR* fromlen
);
Parameters
s
[in] A descriptor identifying a bound socket.
buf
[out] A buffer for the incoming data.
len
[in] The length of buf.
flags
[in] An indicator specifying the way in which the call is made.
from
[out] An optional pointer to a buffer that will hold the source address upon return.
fromlen
[in/out] An optional pointer to the size of the from buffer.
我刚才也看了这个,可是我还是不知道该怎么设置,因为后面还要播放语音, 我用了这句话
pWaveHdrOut->lpData = (LPTSTR)theApp.tempBuf;来设置缓存格式
如果直接定义一个缓冲区的话,因为recvfrom是在一个接收线程里写的,缓冲区又是在OnMM_WOM_OPEN(UINT wParam, LONG lParam)这个消息里设置的,所以我就不知道该怎么办了,可否指点一二呢?呵呵!
我得编程能力很不好,接触VC也不久,问得问题如果太没水准的话请不要介意哦!
int nLen = sizeof(addrFrom);retval = recvfrom(sock,(char*)theApp.tempBuf, 2048, 0,(SOCKADDR*)&addrFrom, &nLen);
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
应该和你说的是一样的。
上面你设置了一个buf[2048],怎么在recvfrom里没有用到呢?
我自己也这样设置了一个buffer,可以接收到数据了,可是这时在这个接收线程里使用的buffer,在消息处理OnMM_WOM_OPEN中不能调用啊?是不是还得它再赋值给全局的变量theApp.tempBuf呢?两个缓冲区的赋值又该怎么赋呢?谢谢...
1)动态分配一块内存;
2)接收数据;
3)通过消息把数据指针传递给音频播放线程;
4)音频播放线程播放完毕,释放分配的内存.