這個程式到了connect時,一直顯示錯誤,請大佬們看看。所用編譯器時 vs 2017
#include "pch.h"
#include <iostream>
#include<WinSock2.h>
#include<WS2tcpip.h> //inet_pton
#pragma comment(lib,"ws2_32.lib") //靜態連接網路庫
int main()
{
//裝在相應lib庫 WSAStartup
WORD version = MAKEWORD(2,1);
WSADATA msg;
int a=WSAStartup(version,&msg); //第一個引數是指定裝在dll的版本,第二個引數指定winsock運行環境的有關資訊
if (a!=0) {
std::cout << "打開網路庫失敗" << std::endl;
}
else {
//各種情況成功
//創建socket
SOCKET num=socket(AF_INET,SOCK_STREAM,0);
if (num == INVALID_SOCKET){
std::cout << "創建socket失敗" << std::endl;
}
else {
std::cout << "創建socket成功,socket編號為" << num << std::endl;
//client
//連接其他主機
//1.創建相應的AF家族協議、ip地址、port結構體
SOCKADDR_IN hello;
hello.sin_family = AF_INET;
hello.sin_port = htons(4484); //通過cmd netstat命令查看的當前運行的某個程式的埠號
//hello.sin_addr.s_addr =inet_addr("127.0.0.1");
//在vs 2017中使用inet_pton來將ip地址放入結構體中
inet_pton(AF_INET, "127.0.0.1", (void*)&hello); //這里127.0.0.1代表本機
/*這里連接的是本機,所以只要指定相應的埠號就可以了,不知道為什么這里不行呢?*/
if (connect(num, (SOCKADDR*)&hello, sizeof(hello)) == 0) //連接成功時回傳0,不成功時回傳-1
{
std::cout << "連接成功" << std::endl;
if (closesocket(num) == 0)
std::cout << "斷開連接成功" << std::endl;
else
std::cout << "斷開連接失敗" << std::endl;
}
else
std::cout << "連接失敗" << std::endl;
WSACleanup();//關閉網路庫
}
}
}
*/
uj5u.com熱心網友回復:
服務器端是否正常?試試修改版本 version = MAKEWORD(2,2);
connect 之前設定斷點, 查看hello是否正常?
WSAGetLastError 看錯誤代碼是什么?
uj5u.com熱心網友回復:
找到原因了,inet_pton這個函式的第三個引數不對,應該是(void*)hello. sin_addr. S_un. s_addr
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/25225.html
標籤:網絡編程
