我在winsock.dll的导出函数中找到了bind函数,可是不知道怎么使用,只是应该有个参数是让输入“127.0.0.1”的吧?另外还发现个函数getservbyport,不知道怎么用,竟然连返回值都没有,而且还是传值的。 Private Declare Function bind Lib "ws2_32.dll" (ByVal s As Long, ByRef addr As SOCKADDR, ByVal namelen As Long) As Long Private Type SOCKADDR sin_family As Integer sin_port As Integer sin_addr As Long sin_zero As String * 8 End TypePrivate Declare Sub getservbyport Lib "ws2_32.dll" (ByVal port As Long, ByVal proto As String)Private Sub Command1_Click() Dim l&, t As SOCKADDR t.sin_port = 677 l = bind(1, t, 0) MsgBox l End Sub
下面这段代码是c++的,在vc6中编译可以,但是连接时出错 #include <stdio.h> #include "winsock2.h" #include <windows.h> #pragma comment(lib, "wininet.lib")void main() { //---------------------- // Initialize Winsock WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != NO_ERROR) printf("Error at WSAStartup()\n");
//---------------------- // Create a SOCKET for listening for // incoming connection requests SOCKET ListenSocket; ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ListenSocket == INVALID_SOCKET) { printf("Error at socket(): %ld\n", WSAGetLastError()); WSACleanup(); return; } //---------------------- // The sockaddr_in structure specifies the address family, // IP address, and port for the socket that is being bound. sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr("127.0.0.1"); service.sin_port = htons(27015); //---------------------- // Bind the socket. if (bind( ListenSocket, (SOCKADDR*) &service, sizeof(service)) == SOCKET_ERROR) { printf("bind() failed.\n"); closesocket(ListenSocket); return; }
Private Declare Function bind Lib "ws2_32.dll" (ByVal s As Long, ByRef addr As SOCKADDR, ByVal namelen As Long) As Long
Private Type SOCKADDR
sin_family As Integer
sin_port As Integer
sin_addr As Long
sin_zero As String * 8
End TypePrivate Declare Sub getservbyport Lib "ws2_32.dll" (ByVal port As Long, ByVal proto As String)Private Sub Command1_Click()
Dim l&, t As SOCKADDR
t.sin_port = 677
l = bind(1, t, 0)
MsgBox l
End Sub
就像Command1_Click()
#include <stdio.h>
#include "winsock2.h"
#include <windows.h>
#pragma comment(lib, "wininet.lib")void main() {
//----------------------
// Initialize Winsock
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
//----------------------
// Create a SOCKET for listening for
// incoming connection requests
SOCKET ListenSocket;
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ListenSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port for the socket that is being bound.
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr("127.0.0.1");
service.sin_port = htons(27015); //----------------------
// Bind the socket.
if (bind( ListenSocket,
(SOCKADDR*) &service,
sizeof(service)) == SOCKET_ERROR) {
printf("bind() failed.\n");
closesocket(ListenSocket);
return;
}
WSACleanup();
return;
}
http://msdn.microsoft.com/en-us/library/ms737550(VS.85).aspx