我做的是基于RTP\RTSP数据传输,RTP数据传输部分
struct sockaddr_in s_in;
*sd = socket(AF_INET,SOCK_DGRAM,0);
setsockopt(*sd,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(opt));
s_in.sin_family = AF_INET;
s_in.sin_addr.s_addr = htonl(INADDR_ANY);
s_in.sin_port = localport;
if (bind(*sd,(struct sockaddr *)&s_in,sizeof(struct sockaddr))!= 0)
printf("UDP socket bind error!");
然后while()
{
send(rtp_socket,buf,len,0);
}
连接调用send发送文件数据,len<1500,Client端用recvfrom接收,在局域网中运行时不会出错,但架到有路由的网络上后,接收到的远远少于发送的,请各位大虾帮忙解答一下,问题出在哪里,应该怎么修改啊...
struct sockaddr_in s_in;
*sd = socket(AF_INET,SOCK_DGRAM,0);
setsockopt(*sd,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(opt));
s_in.sin_family = AF_INET;
s_in.sin_addr.s_addr = htonl(INADDR_ANY);
s_in.sin_port = localport;
if (bind(*sd,(struct sockaddr *)&s_in,sizeof(struct sockaddr))!= 0)
printf("UDP socket bind error!");
然后while()
{
send(rtp_socket,buf,len,0);
}
连接调用send发送文件数据,len<1500,Client端用recvfrom接收,在局域网中运行时不会出错,但架到有路由的网络上后,接收到的远远少于发送的,请各位大虾帮忙解答一下,问题出在哪里,应该怎么修改啊...
解决方案 »
- 急求 基于对话框中slider 控件 音量控制问题
- 调用哪个函数显示或隐藏CMFCToolBar类型工具栏?
- 如何把记事本里的数据输入到程序数组里
- 初学者求救,在线等待!!
- 一个急待解决的问题,如何关闭机器的某个端口?
- 一个32位窗口程序,在客户区如何增加文字,菜单,按扭?
- vc中有没有像delphi一样的DBGRID网格可以和数据库链接显示数据?
- MFC函数CreateProcess调用adb命令的困惑
- 做一个要求重启电脑才能继续进行卸载的程序。如何在运行卸载程序时判断用户是否重启过电脑?
- IE页面上控件如何得知窗口重绘的消息?
- 输入验证响应函数的问题
- 关于类模板继承问题 出现error LNK2019
原理我不清楚,但也治标不治本,坐待问题根本性解决
{
send(rtp_socket,buf,len,0);
}对Send加一个判定吧!或者先简单地加一个Sleep(50)看看丢包会不会减少
区域网基本是网络情况最好的环境了,很多问题反应不出来
*sd = socket(AF_INET,SOCK_DGRAM,IPPROTO_TCP);
??你是用的winsock API么??
那send不是只能发面向连接的包么??
TCP就好多了...UDP丢包也算正常吧...
你这SOCK_DGRAM,也能用connect????????
For a connectionless socket (for example, type SOCK_DGRAM), the operation performed by connect is merely to establish a default destination address that can be used on subsequent send/ WSASend and recv/ WSARecv calls. Any datagrams received from an address other than the destination address specified will be discarded. If the address member of the structure specified by name is all zeroes, the socket will be disconnected. Then, the default remote address will be indeterminate, so send/ WSASend and recv/ WSARecv calls will return the error code WSAENOTCONN. However, sendto/ WSASendTo and recvfrom/ WSARecvFrom can still be used. The default destination can be changed by simply calling connect again, even if the socket is already connected. Any datagrams queued for receipt are discarded if name is different from the previous connect.
==========================================
发包小一些,控制在512以内,再试试
真是学习了,真的是第一次知道还能这样,可是这跟MSDN上的说法很不一样啊,明天有空我试试
send(rtp_socket,buf,len,0);
}
在这个循环里加个sleep(时间) 再创建个线程调用send