从DLL内建立tcp连接
Establishing a tcp connection from within a DLL
我正试图编写一段代码,允许我从DLL文件内建立TCP连接。我的情况是这样的:我有一个ruby应用程序,它需要能够通过套接字发送和接收数据,但是由于它运行的环境,我无法访问本机ruby套接字方法。然而,我可以访问DLL文件并在其中运行函数,所以我想我会为winsock创建一个包装器。不幸的是,试图在正常的c++应用程序中使用一段应该连接到TCP套接字的代码会抛出大量的LNK2019错误,这些错误是我一辈子都无法解决的。
这是我用来连接的方法:
//Socket variable
SOCKET s;
//Establishes a connection to the server
int server_connect(char* addr, int port)
{
//Start up Winsock
WSADATA wsadata;
int error = WSAStartup(0x0202, &wsadata);
//Check if something happened
if (error)
return -1;
//Verify Winock version
if (wsadata.wVersion != 0x0202)
{
//Clean up and close
WSACleanup();
return -2;
}
//Get the information needed to finalize a socket
SOCKADDR_IN target;
target.sin_family = AF_INET; //Address family internet
target.sin_port = _WINSOCKAPI_::htons(port); //Port #
target.sin_addr.s_addr = inet_addr(addr);
//Create the socket
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET)
{
return -3;
}
//Try connecting
if (connect(s, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR)
{
//Failed to connect
return -4;
}
else
{
//Success
return 1;
}
}
我收到的确切错误是:
Error 1 error LNK2019: unresolved external symbol _closesocket@4 referenced in function _server_disconnect [Project Path]
Error 2 error LNK2019: unresolved external symbol _connect@12 referenced in function _server_connect [Project Path]
Error 3 error LNK2019: unresolved external symbol _htons@4 referenced in function _server_connect [Project Path]
Error 4 error LNK2019: unresolved external symbol _inet_addr@4 referenced in function _server_connect [Project Path]
Error 5 error LNK2019: unresolved external symbol _socket@12 referenced in function _server_connect [Project Path]
Error 6 error LNK2019: unresolved external symbol _WSAStartup@8 referenced in function _server_connect [Project Path]
Error 7 error LNK2019: unresolved external symbol _WSACleanup@0 referenced in function _server_connect [Project Path]
Error 8 error LNK1120: 7 unresolved externals [Project Path] 1 1
多谢!
这是预期的。将您的项目与现代Windows系统上的Ws2_32.lib
链接。您的可执行文件将选择具有相同名称的DLL。
相关文章:
- 读取 TCP 标头并使用RAW_SOCKET管理 TCP 连接
- 如何在没有侦听器的情况下创建 TCP 连接?
- 接受超时的 TCP 连接
- 如何使用 TCP 连接发送大块数据
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- 如何正确解析 Java+C++ TCP 连接中的 JSON 对象?
- 从多个 tcp 连接读取数据
- TCP 连接中的超时,没有数据交换
- 在服务器关闭的TCP连接上发送数据时的行为不一致
- 在写入过程中立即使用boost::asio检测关闭的TCP连接
- 在Windows -C 中未建立的TCP连接
- C/C++ 套接字:如果我在 IPv6 TCP 连接之前执行任何操作,则连接将失败
- QT中的TCP连接性能低问题
- 要打开以供C++中的应用程序最佳使用的并行套接字/TCP连接数
- C++ SFML 网络:无法建立 TCP 连接
- boost::asio::async_connect 不仅创建一个 TCP 连接,还创建两个
- 破坏TCP连接的好方法
- 使用Winsock API同时打开TCP连接
- 其他数据以及 TCP 连接请求
- 获取用于 TCP 连接的随机端口