收录日期:2018/08/15 02:08:52 时间:2016/05/22 09:12:28 标签:网络编程
本人一程序是关于点到点UDP语音传输的,在单机上测试,如果计算机和网络相连,就会有错误报告,如果与外部网络断开连接,运行我的程序,就没问题,不知错误到底在哪,请各位指教.
大概实现如下,在初始化窗体的OnInitDialog函数中有:
         m_sRecv=socket(AF_INET,SOCK_DGRAM,0);
addrRecv.sin_family=AF_INET;
addrRecv.sin_addr.S_un.S_addr=INADDR_ANY;
addrRecv.sin_port=htons(RECEIVEPORT);
if(bind(m_sRecv,(LPSOCKADDR)&addrRecv,sizeof(addrRecv))==SOCKET_ERROR)
{
MessageBox("bind fail.");
}   
         
    int iError=WSAAsyncSelect(m_sRecv,m_hWnd,WM_READREADY,FD_READ|FD_CLOSE);
if(iError==SOCKET_ERROR)
{
   ......
}
在请求连接按扭事件中有:
         m_RemoteIP=inet_addr(dlg.ip);/*此处是从窗体获取对端IP,本机测试用了127.0.0.1*/
         to.sin_family=AF_INET;
to.sin_port=htons(RECEIVEPORTIP);
to.sin_addr.S_un.S_addr=m_RemoteIP; /*单步跟踪到此会报错*/

int iError=sendto(m_IPSend,chQuery,sizeof(chQuery),0,(LPSOCKADDR)&to,sizeof(to));

望各位指教,不胜感激,急急急!!!



是在这一句
to.sin_addr.S_un.S_addr=m_RemoteIP; /*单步跟踪到此会报错*/

出现debug错误吗?
是不是内存错误??
描述的再详细一些!!
为什么要用S_un呢?
to.sin_addr.s_addr = inet_addr(m_RemoteIP);看看
同意楼上的
struct sockaddr_in{
 short sin_family;
 unsigned short sin_port;
 IN_ADDR sin_addr;
 char sin_zero[8];};

typedef struct in_addr {
 union {
 struct{
 unsigned char s_b1,
 s_b2,
 s_b3,
 s_b4;
 } S_un_b;
 struct {
 unsigned short s_w1,
 s_w2;
 } S_un_w;
 unsigned long S_addr;
 } S_un;
} IN_ADDR;

这就是我用S_un的原因,忘了说,如果我把断点设在OnInitDialog里,执行到最后}也会报错
t0mychen(TomyChen) :

在他的程序中已经
m_RemoteIP=inet_addr(dlg.ip);

错误描述贴上来啦
to.sin_addr.S_un.S_addr=m_RemoteIP; /*单步跟踪到此会报错*/
错误描述如下
“0x00408f7e”指令引用的“0x45504149”内存。该内存不能为“read”。要终止该程序,请按“确定”。 
请大家帮帮忙了!!!