我一直在使用msvc ++ 2010中的boost.最近,我尝试了新版本的msvc ++(2012终极版),从那以后我无法构建我的应用程序,因为它不包括像winsock2这样的头文件.一些网站说新窗口的应用程序模式,地铁样式,不能使用这些库和标题,然后我已经尝试从这种地铁样式切换到旧桌面.有人能帮我吗?
我可以发送文件的简单服务器和客户端,并且我需要你们看看此源是否已完成。因为我认为它不会下载完整文件。
也许对此来源有限制?因为我上传/下载了200K,还有更多..
服务器:
#include <WinSock2.h>
#include <Windows.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
SOCKET Socket, Sub;
WSADATA Winsock;
sockaddr_in Addr;
int Addrlen = sizeof(sockaddr_in);
char Buffer[256];
char *Str;
sockaddr_in IncomingAddress;
int AddressLen = sizeof(IncomingAddress);
int main()
{
WSAStartup(MAKEWORD(2, 2), &Winsock); // Start Winsock
if(LOBYTE(Winsock.wVersion) != 2 || HIBYTE(Winsock.wVersion) != 2) // Check version
{
WSACleanup();
return 0;
}
Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
ZeroMemory(&Addr, sizeof(Addr));
Addr.sin_family = AF_INET;
Addr.sin_port = htons(6091);
bind(Socket, (sockaddr*)&Addr, sizeof(Addr));
if(listen(Socket, 1) == SOCKET_ERROR)
{
printf("listening error\n"); …Run Code Online (Sandbox Code Playgroud) 我试图寻找它,但我找不到任何有用的灵魂.
如今,由于Hamachi,Virtual box等,Windows可以检测到安装了多个由物理硬件控制的电子网络.
现在我需要获得机器的真正IP地址.当我尝试使用gethostbyname时,它返回了我的Hamachi客户端的IP地址.
现在我需要找到100%可靠的方法来接收真正的ip地址.任何链接/提示/文章/方法真的很感激.
编辑:
到目前为止得到了这个 - Remy Lebau吸收的方法,但它不能按我想要的方式工作 - 总是返回127.0.0.1:
int main()
{
WSADATA WSA_info;
if (WSAStartup(MAKEWORD(2,2),&WSA_info)!=0)
{
std::cout << "Error with WSA.\n";
std::cin.get();
return -1;
}
SOCKADDR_IN adress;
adress.sin_family = AF_INET;
adress.sin_port = htons(80);
adress.sin_addr.S_un.S_addr = inet_addr("213.241.88.40"); //its google's IP adress - to chech it I used ping google.com in cmd (maybe there is somethign wrong with this)
SOCKET sock;
if ((sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))== INVALID_SOCKET){
std::cout << "Error while creating socket." << std::endl;
closesocket(sock);
WSACleanup();
std::cin.get();
return …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么我得到这个错误但是同一个类在VS15下完美运行现在我正在使用VS12,它是一个简单的Winsock2实现,
int Net::createServer(int port, int protocol)
{
int status;
// ----- Initialize network stuff -----
status = initialize(port, protocol);
if (status != NET_OK)
return status;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY); // listen on all addresses
// bind socket
if (bind(sock, (SOCKADDR *)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
{
status = WSAGetLastError(); // get detailed error
return ((status << 16) + NET_BIND_FAILED);
}
bound = true;
mode = SERVER;
return NET_OK;
}
Run Code Online (Sandbox Code Playgroud)
问题来自这里
if (bind(sock, (SOCKADDR *)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
Run Code Online (Sandbox Code Playgroud)
控制台日志:
error C2678: binary '==' …Run Code Online (Sandbox Code Playgroud) 我在winsock2中做了一个简单的服务器客户端控制台聊天框.然后我的同事问我是否可以进行单服务器多客户端连接,其中SERVER将在TCP中,而CLIENTS将在UDP中.此外,客户端不知道服务器的IP但知道端口号,即客户端必须搜索服务器然后连接它.所有这些都通过LAN.
任何人都可以告诉我如何做这样的程序,或者如果可能的话可以发布代码供参考.