18,356
社区成员
发帖
与我相关
我的任务
分享
while(true)
{
int i=0;
result = recvfrom(socket,recvBuff,sizeof(recvBuff),0,(sockaddr*)&(pThis->sockFrom),&len); //接收数据,recvbuff开了50000字节
if(SOCKET_ERROR == result)
{
break;
}
pThis->dbg_timeaft=GetTickCount();
DWORD deltaRecv=pThis->dbg_timeaft-pThis->dbg_timepre;
pThis->dbg_timepre=pThis->dbg_timeaft;
CString str;
str.Format("delta=%d\n",deltaRecv);//打印时间间隔
TRACE(str);
memcpy_s(tempBuff,sizeof(recvBuff),recvBuff,result);
//pThis->ImageFromStream((BYTE*)tempBuff,result);
pThis->m_handleData.data=(BYTE*)tempBuff;
pThis->m_handleData.size=result;
::PostMessage(hWnd,WM_RECVDATA,0,LPARAM(&(pThis->m_handleData))); //把WM_RECVDATA消息压入window消息队列,这里丢数据出去处理为图像
memset(recvBuff,0,sizeof(recvBuff)); //memset函数用于初始化buffer区
}
public void run() {
try {
DatagramSocket socket = new DatagramSocket(port);
//创建一个InetAddree
InetAddress serverAddress = InetAddress.getByName(ipname);
byte data [] =myoutputstream.toByteArray(); //这是要传输的数据
//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,port);
//调用socket对象的send方法,发送数据
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
Log.v("deltaSend",Long.toString(deltasend));//打印时间间隔
timepre=timeaft;
socket.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
打印出的时间间隔均匀200ms左右。[/quote]
你的Android的输出正常吗?[/quote]
这是Android端发送的Log,贴一部分出来,最后一项是与上一次发送的时间间隔
06-27 09:22:49.010: V/deltaSend(1942): 151
06-27 09:22:49.190: V/deltaSend(1942): 176
06-27 09:22:49.420: V/deltaSend(1942): 230
06-27 09:22:49.560: V/deltaSend(1942): 142
06-27 09:22:49.700: V/deltaSend(1942): 137
06-27 09:22:49.880: V/deltaSend(1942): 186
06-27 09:22:50.030: V/deltaSend(1942): 152
06-27 09:22:50.170: V/deltaSend(1942): 136
06-27 09:22:50.310: V/deltaSend(1942): 134
06-27 09:22:50.440: V/deltaSend(1942): 137
06-27 09:22:50.570: V/deltaSend(1942): 130
06-27 09:22:50.710: V/deltaSend(1942): 136
06-27 09:22:50.840: V/deltaSend(1942): 136
06-27 09:22:50.980: V/deltaSend(1942): 132
06-27 09:22:51.110: V/deltaSend(1942): 138
06-27 09:22:51.280: V/deltaSend(1942): 167
06-27 09:22:51.420: V/deltaSend(1942): 138
06-27 09:22:51.610: V/deltaSend(1942): 190
06-27 09:22:51.750: V/deltaSend(1942): 137
06-27 09:22:51.880: V/deltaSend(1942): 135
06-27 09:22:52.040: V/deltaSend(1942): 155
06-27 09:22:52.190: V/deltaSend(1942): 154
06-27 09:22:52.360: V/deltaSend(1942): 166
06-27 09:22:52.490: V/deltaSend(1942): 137
06-27 09:22:52.640: V/deltaSend(1942): 144
06-27 09:22:52.810: V/deltaSend(1942): 171
06-27 09:22:53.050: V/deltaSend(1942): 238
06-27 09:22:53.210: V/deltaSend(1942): 166
06-27 09:22:53.350: V/deltaSend(1942): 135
06-27 09:22:53.500: V/deltaSend(1942): 151
06-27 09:22:53.650: V/deltaSend(1942): 155
06-27 09:22:53.920: V/deltaSend(1942): 272
06-27 09:22:54.120: V/deltaSend(1942): 197
06-27 09:22:54.290: V/deltaSend(1942): 165
06-27 09:22:54.440: V/deltaSend(1942): 151
06-27 09:22:54.590: V/deltaSend(1942): 149
06-27 09:22:54.730: V/deltaSend(1942): 147
06-27 09:22:54.890: V/deltaSend(1942): 154
[/quote]
再打印一下发送数据大小 public void run() {
try {
DatagramSocket socket = new DatagramSocket(port);
//创建一个InetAddree
InetAddress serverAddress = InetAddress.getByName(ipname);
byte data [] =myoutputstream.toByteArray(); //这是要传输的数据
//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,port);
//调用socket对象的send方法,发送数据
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
Log.v("deltaSend",Long.toString(deltasend));//打印时间间隔
timepre=timeaft;
socket.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
打印出的时间间隔均匀200ms左右。[/quote]
你的Android的输出正常吗?[/quote]
这是Android端发送的Log,贴一部分出来,最后一项是与上一次发送的时间间隔
06-27 09:22:49.010: V/deltaSend(1942): 151
06-27 09:22:49.190: V/deltaSend(1942): 176
06-27 09:22:49.420: V/deltaSend(1942): 230
06-27 09:22:49.560: V/deltaSend(1942): 142
06-27 09:22:49.700: V/deltaSend(1942): 137
06-27 09:22:49.880: V/deltaSend(1942): 186
06-27 09:22:50.030: V/deltaSend(1942): 152
06-27 09:22:50.170: V/deltaSend(1942): 136
06-27 09:22:50.310: V/deltaSend(1942): 134
06-27 09:22:50.440: V/deltaSend(1942): 137
06-27 09:22:50.570: V/deltaSend(1942): 130
06-27 09:22:50.710: V/deltaSend(1942): 136
06-27 09:22:50.840: V/deltaSend(1942): 136
06-27 09:22:50.980: V/deltaSend(1942): 132
06-27 09:22:51.110: V/deltaSend(1942): 138
06-27 09:22:51.280: V/deltaSend(1942): 167
06-27 09:22:51.420: V/deltaSend(1942): 138
06-27 09:22:51.610: V/deltaSend(1942): 190
06-27 09:22:51.750: V/deltaSend(1942): 137
06-27 09:22:51.880: V/deltaSend(1942): 135
06-27 09:22:52.040: V/deltaSend(1942): 155
06-27 09:22:52.190: V/deltaSend(1942): 154
06-27 09:22:52.360: V/deltaSend(1942): 166
06-27 09:22:52.490: V/deltaSend(1942): 137
06-27 09:22:52.640: V/deltaSend(1942): 144
06-27 09:22:52.810: V/deltaSend(1942): 171
06-27 09:22:53.050: V/deltaSend(1942): 238
06-27 09:22:53.210: V/deltaSend(1942): 166
06-27 09:22:53.350: V/deltaSend(1942): 135
06-27 09:22:53.500: V/deltaSend(1942): 151
06-27 09:22:53.650: V/deltaSend(1942): 155
06-27 09:22:53.920: V/deltaSend(1942): 272
06-27 09:22:54.120: V/deltaSend(1942): 197
06-27 09:22:54.290: V/deltaSend(1942): 165
06-27 09:22:54.440: V/deltaSend(1942): 151
06-27 09:22:54.590: V/deltaSend(1942): 149
06-27 09:22:54.730: V/deltaSend(1942): 147
06-27 09:22:54.890: V/deltaSend(1942): 154
public void run() {
try {
DatagramSocket socket = new DatagramSocket(port);
//创建一个InetAddree
InetAddress serverAddress = InetAddress.getByName(ipname);
byte data [] =myoutputstream.toByteArray(); //这是要传输的数据
//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,port);
//调用socket对象的send方法,发送数据
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
Log.v("deltaSend",Long.toString(deltasend));//打印时间间隔
timepre=timeaft;
socket.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
打印出的时间间隔均匀200ms左右。[/quote]
你是通过网线还是Wifi传输的?[/quote]
安卓的输出正常200ms间隔,我在安卓SendPacket设置了累计发送了200包进入断点,然后PC端wireshark数据也全部收到200包,没问题,只是接收的时间如上面所说的不是均匀200ms接收到。
是用手机采集视频的,wifi。 public void run() {
try {
DatagramSocket socket = new DatagramSocket(port);
//创建一个InetAddree
InetAddress serverAddress = InetAddress.getByName(ipname);
byte data [] =myoutputstream.toByteArray(); //这是要传输的数据
//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,port);
//调用socket对象的send方法,发送数据
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
Log.v("deltaSend",Long.toString(deltasend));//打印时间间隔
timepre=timeaft;
socket.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
打印出的时间间隔均匀200ms左右。[/quote]
你是通过网线还是Wifi传输的? public void run() {
try {
DatagramSocket socket = new DatagramSocket(port);
//创建一个InetAddree
InetAddress serverAddress = InetAddress.getByName(ipname);
byte data [] =myoutputstream.toByteArray(); //这是要传输的数据
//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,port);
//调用socket对象的send方法,发送数据
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
Log.v("deltaSend",Long.toString(deltasend));//打印时间间隔
timepre=timeaft;
socket.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
打印出的时间间隔均匀200ms左右。[/quote]
你的Android的输出正常吗? public void run() {
try {
DatagramSocket socket = new DatagramSocket(port);
//创建一个InetAddree
InetAddress serverAddress = InetAddress.getByName(ipname);
byte data [] =myoutputstream.toByteArray(); //这是要传输的数据
//创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号
DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,port);
//调用socket对象的send方法,发送数据
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
Log.v("deltaSend",Long.toString(deltasend));//打印时间间隔
timepre=timeaft;
socket.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
打印出的时间间隔均匀200ms左右。int ncount=data.length/500;
for(int i=0;i<ncount;i++)
{
DatagramPacket packet = new DatagramPacket(data,i*500,500,serverAddress,port);
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
String string=Long.toString(deltasend)+"#"+Integer.toString(500);
Log.v("deltaSend",string);
timepre=timeaft;
}
DatagramPacket packet = new DatagramPacket(data,ncount*500,data.length%500,serverAddress,port);
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
//String string=Long.toString(deltasend)+"#"+Integer.toString(abc);
String string=Long.toString(deltasend)+"#"+Integer.toString(data.length%500);
Log.v("deltaSend",string);
timepre=timeaft;
打印的结果:安卓端没问题
06-27 15:46:31.690: V/deltaSend(32390): 6#500
06-27 15:46:31.690: V/deltaSend(32390): 1#500
06-27 15:46:31.700: V/deltaSend(32390): 9#500
06-27 15:46:31.700: V/deltaSend(32390): 1#500
06-27 15:46:31.700: V/deltaSend(32390): 0#500
06-27 15:46:31.700: V/deltaSend(32390): 1#500
06-27 15:46:31.700: V/deltaSend(32390): 0#500
06-27 15:46:31.700: V/deltaSend(32390): 1#500
06-27 15:46:31.700: V/deltaSend(32390): 0#500
06-27 15:46:31.700: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 0#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 0#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 0#222
06-27 15:46:31.980: V/deltaSend(32390): 274#500
06-27 15:46:31.990: V/deltaSend(32390): 8#500
06-27 15:46:31.990: V/deltaSend(32390): 0#500
06-27 15:46:31.990: V/deltaSend(32390): 1#500
06-27 15:46:31.990: V/deltaSend(32390): 0#500
PC端,还是一样的异常。
delta=1829======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=15======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======227
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=3016======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======416
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
[/quote]
使用Wireshark看看数据传输过去了吗?int ncount=data.length/500;
for(int i=0;i<ncount;i++)
{
DatagramPacket packet = new DatagramPacket(data,i*500,500,serverAddress,port);
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
String string=Long.toString(deltasend)+"#"+Integer.toString(500);
Log.v("deltaSend",string);
timepre=timeaft;
}
DatagramPacket packet = new DatagramPacket(data,ncount*500,data.length%500,serverAddress,port);
socket.send(packet);
timeaft=System.currentTimeMillis();
long deltasend=timeaft-timepre;
//String string=Long.toString(deltasend)+"#"+Integer.toString(abc);
String string=Long.toString(deltasend)+"#"+Integer.toString(data.length%500);
Log.v("deltaSend",string);
timepre=timeaft;
打印的结果:安卓端没问题
06-27 15:46:31.690: V/deltaSend(32390): 6#500
06-27 15:46:31.690: V/deltaSend(32390): 1#500
06-27 15:46:31.700: V/deltaSend(32390): 9#500
06-27 15:46:31.700: V/deltaSend(32390): 1#500
06-27 15:46:31.700: V/deltaSend(32390): 0#500
06-27 15:46:31.700: V/deltaSend(32390): 1#500
06-27 15:46:31.700: V/deltaSend(32390): 0#500
06-27 15:46:31.700: V/deltaSend(32390): 1#500
06-27 15:46:31.700: V/deltaSend(32390): 0#500
06-27 15:46:31.700: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 0#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 0#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 1#500
06-27 15:46:31.710: V/deltaSend(32390): 0#222
06-27 15:46:31.980: V/deltaSend(32390): 274#500
06-27 15:46:31.990: V/deltaSend(32390): 8#500
06-27 15:46:31.990: V/deltaSend(32390): 0#500
06-27 15:46:31.990: V/deltaSend(32390): 1#500
06-27 15:46:31.990: V/deltaSend(32390): 0#500
PC端,还是一样的异常。
delta=1829======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=15======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======227
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=3016======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======416
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
delta=0======500
06-27 14:42:17.620: V/deltaSend(27046): 200#11802
06-27 14:42:17.800: V/deltaSend(27046): 172#14401
06-27 14:42:17.970: V/deltaSend(27046): 173#14328
06-27 14:42:18.150: V/deltaSend(27046): 175#14376
06-27 14:42:18.340: V/deltaSend(27046): 192#15284
06-27 14:42:18.510: V/deltaSend(27046): 177#15537
06-27 14:42:18.740: V/deltaSend(27046): 223#14723
06-27 14:42:18.960: V/deltaSend(27046): 221#12306
06-27 14:42:19.120: V/deltaSend(27046): 164#12207
06-27 14:42:19.290: V/deltaSend(27046): 169#14259
06-27 14:42:19.490: V/deltaSend(27046): 198#11138
06-27 14:42:19.650: V/deltaSend(27046): 167#13174
06-27 14:42:19.800: V/deltaSend(27046): 141#14280
06-27 14:42:20.030: V/deltaSend(27046): 223#12923
06-27 14:42:20.170: V/deltaSend(27046): 153#15614
06-27 14:42:20.380: V/deltaSend(27046): 206#15417
06-27 14:42:20.570: V/deltaSend(27046): 188#15194
06-27 14:42:20.759: V/deltaSend(27046): 181#17358
06-27 14:42:20.960: V/deltaSend(27046): 218#16776
06-27 14:42:21.150: V/deltaSend(27046): 185#17777
06-27 14:42:21.340: V/deltaSend(27046): 188#17110
06-27 14:42:21.510: V/deltaSend(27046): 161#17481
06-27 14:42:21.740: V/deltaSend(27046): 231#17764
06-27 14:42:22.050: V/deltaSend(27046): 317#16260
06-27 14:42:22.340: V/deltaSend(27046): 290#17583
06-27 14:42:22.570: V/deltaSend(27046): 229#16583
06-27 14:42:22.850: V/deltaSend(27046): 270#17208
[/quote]
你试试每次仅仅Send最大不超过500个字节?int count=0;
do
{
result=recv(sockConn,recvBuff,sizeof(recvBuff),0);
memcpy_s(imageBuff+count,result,recvBuff,result);
count+=result;
} while (result!=0);
打印出来的结果如下,没问题
delta=219======31244
delta=203======29909
delta=203======24529
delta=219======28051
delta=235======24380
delta=187======27804
delta=31======27440
delta=219======24215
delta=141======24979
delta=250======26175
delta=328======27405
delta=219======28048
delta=125======29138
delta=78======31836
delta=203======28371
delta=125======28968
delta=187======31344
delta=203======32300
delta=219======33851
delta=110======33582
delta=171======34880
delta=172======33298
delta=172======33976
delta=188======34477
delta=172======33360
delta=218======34424
delta=141======31967
delta=172======34164
delta=172======34049
delta=203======34732
delta=172======32857
delta=172======34121
delta=187======34514
delta=172======33993
delta=250======31830
delta=109======34313
delta=157======34445
delta=171======35049
delta=188======35175
delta=234======35559
delta=188======33362
delta=187======33603
delta=157======33377
delta=234======27528
delta=141======29112
delta=203======31587
delta=187======36358
大神们再帮忙分析下UDP问题。06-27 14:42:17.620: V/deltaSend(27046): 200#11802
06-27 14:42:17.800: V/deltaSend(27046): 172#14401
06-27 14:42:17.970: V/deltaSend(27046): 173#14328
06-27 14:42:18.150: V/deltaSend(27046): 175#14376
06-27 14:42:18.340: V/deltaSend(27046): 192#15284
06-27 14:42:18.510: V/deltaSend(27046): 177#15537
06-27 14:42:18.740: V/deltaSend(27046): 223#14723
06-27 14:42:18.960: V/deltaSend(27046): 221#12306
06-27 14:42:19.120: V/deltaSend(27046): 164#12207
06-27 14:42:19.290: V/deltaSend(27046): 169#14259
06-27 14:42:19.490: V/deltaSend(27046): 198#11138
06-27 14:42:19.650: V/deltaSend(27046): 167#13174
06-27 14:42:19.800: V/deltaSend(27046): 141#14280
06-27 14:42:20.030: V/deltaSend(27046): 223#12923
06-27 14:42:20.170: V/deltaSend(27046): 153#15614
06-27 14:42:20.380: V/deltaSend(27046): 206#15417
06-27 14:42:20.570: V/deltaSend(27046): 188#15194
06-27 14:42:20.759: V/deltaSend(27046): 181#17358
06-27 14:42:20.960: V/deltaSend(27046): 218#16776
06-27 14:42:21.150: V/deltaSend(27046): 185#17777
06-27 14:42:21.340: V/deltaSend(27046): 188#17110
06-27 14:42:21.510: V/deltaSend(27046): 161#17481
06-27 14:42:21.740: V/deltaSend(27046): 231#17764
06-27 14:42:22.050: V/deltaSend(27046): 317#16260
06-27 14:42:22.340: V/deltaSend(27046): 290#17583
06-27 14:42:22.570: V/deltaSend(27046): 229#16583
06-27 14:42:22.850: V/deltaSend(27046): 270#17208