【網路編程/C++】關於網路編程中錯誤10013的解決方案

來源:互聯網
上載者:User

糾結了一天多的DHCP包發送問題得以解決,在修改了整個程式的設計模式後,將原來各種資料包分別發送,改為了一個專門發送資料包的類和另一個專門處理資料包的類,然後就感覺程式修改起來尤其容易~~

言歸正傳,今天的主要問題是使用socket進行廣播,但是報出錯誤碼:10013。通過查詢知道這個問題是有趣許可權不夠的原因引起的,但是,接觸socket到現在,我還從來沒有聽說過socket中還有什麼許可權問題,囧||。

問了同事大哥後,才知道原來是一個叫做setsockopt的函數作祟。修改之後,空的dhcp資料包就能夠成功發送了~~~O(∩_∩)O

 

實現代碼:

 

//發送資料包<br />bool DHCPCONNECTCONTROL::SENDTOSERVER(DHCP_HEADER package)<br />{<br /> clientsocket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); //建立UDP通訊端<br /> BOOL bBroadcast=TRUE;<br /> setsockopt(clientsocket,SOL_SOCKET,SO_BROADCAST,(const char *)&bBroadcast,sizeof(BOOL)); //設定廣播許可權</p><p> if(clientsocket==INVALID_SOCKET) //通訊端建立失敗<br /> {<br /> cout<<"Invalid socket"<<endl;<br /> WSACleanup();<br /> return false;<br /> }<br /> //配置協議簇<br /> clientsock_in.sin_family=AF_INET;<br /> clientsock_in.sin_addr.S_un.S_addr=htonl(INADDR_BROADCAST);<br /> clientsock_in.sin_port=htons(DHCPSENDPORT);<br /> if(connect(clientsocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR))==SOCKET_ERROR) //建立串連<br /> {<br /> cout<<"failed to connect."<<endl;<br /> closesocket(clientsocket);<br /> WSACleanup();<br /> return false;<br /> }<br /> cout<<"ip:"<<inet_ntoa(clientsock_in.sin_addr)<<endl;<br /> cout<<"port:"<<ntohs(clientsock_in.sin_port)<<endl;<br /> int err=sendto(clientsocket,(char*)&package,sizeof(package),0,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR_IN)); //資料包傳輸<br /> if(err==SOCKET_ERROR) //資料轉送錯誤<br /> {<br /> DWORD res=WSAGetLastError();<br /> cout<<"傳輸發生錯誤:"<<res<<endl;<br /> closesocket(clientsocket);<br /> WSACleanup();<br /> return false;<br /> }<br /> cout<<"資料包發送成功!"<<endl;<br /> closesocket(clientsocket);<br /> return true;<br />}<br />

 

 

運行結果:

 

 

 

 

 

 

用wireshark抓包如下:

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.