日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Winsock中accept函数获取到的ip地址一直为204.204.204.204或0xcccccccc的解决方案

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Winsock中accept函数获取到的ip地址一直为204.204.204.204或0xcccccccc的解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

出現問題的原因

我這邊出現問題的代碼如下:

SOCKADDR_IN clientAddr; acceptSocket = accept(ProxyServer, (SOCKADDR*)&clientAddr, NULL); printf("客戶端IP為:%s", inet_ntoa(clientAddr.sin_addr));//輸出204.204.204.204

我這里是accept函數出現了這個問題,其實用getpeername等函數獲取有問題的,應該都大同小異,不信往下讀一讀: )。

代碼一亮出來,老師傅可能一眼就看出來問題所在了,但是卻折騰了我半個小時,相信點進來的朋友也都有類似的問題吧!

首先解釋為啥是204.204.204.204或者0xcccccccc:

204換成16進制是0xcc,這是vc初始化堆棧的時候使用的數據。

所以說,如果出現了204.204.204.204,那么說明數據沒有被正確的寫入我們所指定的SOCKADDR_IN類型的變量中。

解決方案

accept函數的第三個參數,是要求我們寫入第二個參數的大小的!但是出問題的代碼里面用的是NULL!不信看看上方第二行代碼!

(p.s. 這是俺們某次實驗,老師給了實例代碼,默認第二個參數、第三個參數都是NULL,但是要往上魔改加新功能啊,但是俺又是新手啊!!就只改了第二個參數,第三個參數忘記改了!!!)

解決方案也很簡單,把第三個參數給了就可以了(笑)

用getpeername等函數獲取有問題的,解決方法同理,把大小參數給指定了就可以了!

所以上方代碼更正后的結果如下:

SOCKADDR_IN clientAddr; int sockaddr_in_size = sizeof(SOCKADDR_IN);//給定第三個參數 acceptSocket = accept(ProxyServer, (SOCKADDR*)&clientAddr, &sockaddr_in_size);//把第三個參數傳進去 printf("客戶端IP為:%s", inet_ntoa(clientAddr.sin_addr));

參考鏈接

[1] https://blog.csdn.net/wu_lai_314/article/details/8374905
[2] https://zhidao.baidu.com/question/569840007.html

總結

以上是生活随笔為你收集整理的Winsock中accept函数获取到的ip地址一直为204.204.204.204或0xcccccccc的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。