int len =sizeof(SOCKADDR_IN)
recvfrom(m_hSocket,buffer,sizeof(buffer),0,(LPSOCKADDR)&from,&len)
m_hSocket是本地套接迟升字,兆伏函数调用后from中族旦携是消息来源的地址信息
不管是window是平台还是linux平台接受函数会有返哗胡回值
一般返回的是接收到的字节数
通过这个来判断
一般没羡正有端口时间,
比如udp的接受函数是receive()
那么当程序执行到receive的时候,如果没有数据,程序就阻塞在这里了,直到有数据来的时候才继续执行后面的代码
所以一般的用法是开一个兄芦悔线程,接受udp的数据,这样能保证程序不阻塞
然后,当receive到来的时候,下一行代码,可以自己建立个event,然后setevent()
来通知相关的thread
windows和linux都有事件,也就是event的机制,两者使用略有不同
但是udp接收函数一般本身不会带这个功能
发送端
tic
load('data_test.mat')
s=cell(200,200)%定义待传输橘歼的数据
for i=1:200
for j=1:200
for k=1:201
b(k)=data_test_im(i,j,k)%深度位数据
end
s(i,j)={[11,i,j,b]}%待传输数据
end
end
u1 = udp('127.0.0.1', 'RemotePort', 8866, 'LocalPort', 8844)%定义udp端口号和ip
u1.OutputBufferSize=8192%传数据buffer大小
u1.Timeout=1000%传输时间限制
fopen(u1)
for i=1:200
for j=1:200
aa=s(i,j)
A=aa{:}
%flag=fread(u1,1,'嫌轿char')
fwrite(u1,A,'double')%传数据
end
flag=fread(u1,1,'char')
end
fclose(u1)
delete(u1)
clear u1
toc
接收端
tic
u2 = udp('127.0.0.1'圆者冲, 'RemotePort', 8844, 'LocalPort', 8866)
u2.InputBufferSize =8192
u2.TimeOut=100
fopen(u2)
u2.DatagramTerminateMode='off'
C=zeros(204,40000)
for i=1:40000
%fwrite(u2,flag,'char')
if(mod(i,200)~=0)
C(:,i)=fread(u2,204,'float32')
else
fwrite(u2,flag,'char')
end
end
fclose(u2)
delete(u2)
clear u2
toc
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)