问题描述
所以我试图用C ++实现一个基本服务器,我在MinGW中使用代码块,当我去运行服务器时,我会遇到一系列错误
undefined reference to `__imp_socket' undefined reference to `__imp_WSAStartup' undefined reference to `__imp_bind' undefined reference to `__imp_listen' undefined reference to `__imp_accept'
等 基本上,以下代码中使用的所有联网功能 我认为问题在于链接,这正是#pragma注释(lib,“ ws2_32.lib”)应解决的问题。我也尝试使用g ++ main.cpp -lws2_32和g ++ main.cpp -o main -lws2_32进行编译,但无济于事。 99%的人认为问题不在于代码,但无论如何我还是在下面添加了它。希望有人有另一个建议
#include <iostream>
#include <ws2tcpip.h>
#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")
using namespace std;
int main()
{
//initialize winsock
WSADATA wsData;
WORD ver = MAKEWORD(2,2);
int wsOK = WSAStartup(ver,&wsData);
if(wsOK != 0){
cerr << "Can't initialize winsock" << endl;
return -1;
}
// create a socket & bind to an ip and port
SOCKET listening = socket(AF_INET,SOCK_STREAM,0);
if(listening == INVALID_SOCKET){
cerr << "Can't create a socket" << endl;
return -1;
}
sockaddr_in hint;
hint.sin_family = AF_INET;
hint.sin_port = htons(54000);
hint.sin_addr.S_un.S_addr = INADDR_ANY;
bind(listening,(sockaddr*)&hint,sizeof(hint));
// Tell winsock to listen
listen(listening,SOMAXCONN);
// wait for connection
sockaddr_in client;
int clientsize = sizeof(client);
SOCKET clientsocket = accept(listening,(sockaddr*)&client,&clientsize);
//if (clientsocket == INVALID_SOCKET)
char host[NI_MAXHOST]; //client remote name
char service[NI_MAXHOST]; //service port client connects on
ZeroMemory(host,NI_MAXHOST);
ZeroMemory(service,NI_MAXHOST);
if(getnameinfo((sockaddr*)&client,sizeof(client),host,NI_MAXHOST,service,NI_MAXSERV,0 ) == 0){
cout << host << " connected on port " << service << endl;
}
/*
else{
inet_ntoa(AF_INET,&client.sin_addr,NI_MAXHOST);
cout << host << " connected on port " << ntohs(client.sin_port) << endl;
}
*/
// closet listener
//closesocket(listening);
// while loop: accept and echo message back to client
char buf[4096];
while(true){
ZeroMemory(buf,4096);
//wait for data
int bytesRecieved = recv(clientsocket,buf,4096,0);
if (bytesRecieved == SOCKET_ERROR){
cerr << "Error in recv" << endl;
return -1;
}
if (bytesRecieved == 0){
cout << "client disconnected" << endl;
break;
}
//echo message back to client
send(clientsocket,bytesRecieved+1,0);
}
// close socket
closesocket(clientsocket);
// shutdown winsock
WSACleanup();
return 0;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)