bind函数
bind
函数用于将一个套接字(socket)与特定的地址(IP地址和端口号)关联起来。在上下文中,通常用于服务器在启动时绑定一个固定的端口号,以等待客户端的连接。
函数原型:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
参数解释:
sockfd
: 要绑定地址的套接字描述符。addr
: 指向sockaddr
结构体的指针,包含了要绑定的地址信息。addrlen
:sockaddr
结构体的长度。
在你提供的代码中,serverSocket
是通过 socket
函数创建的套接字。然后,bind
函数用于将这个套接字与 serverAddr
结构体中指定的地址信息关联起来。
// 绑定Socket
if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {
printf("Bind failed with error: %d\n", WSAGetLastError());
closesocket(serverSocket);
WSACleanup();
return 1;
}
这里 serverSocket
是要被绑定的套接字,&serverAddr
是一个指向 serverAddr
结构体的指针,sizeof(serverAddr)
表示 serverAddr
结构体的大小。
绑定成功后,服务器套接字将与指定的 IP 地址和端口号关联起来,可以开始监听客户端的连接请求。
connect函数
connect
函数用于建立与远程服务器的连接。
int connect(
SOCKET s,
const sockaddr *name,
int namelen
);
s
: 描述符,标识与远程服务器之间的套接字。name
: 指向sockaddr
结构的指针,其中包含目标服务器的地址信息。namelen
:sockaddr
结构的长度。
返回值:
- 如果成功,返回 0。
- 如果出现错误,返回
SOCKET_ERROR
,可以通过调用WSAGetLastError
获取错误代码。
示例用法:
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main() {
// 初始化Winsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("WSAStartup failed.\n");
return 1;
}
// 创建Socket
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket == INVALID_SOCKET) {
printf("Error creating socket: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
// 配置服务器地址
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(12345);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
// 连接服务器
if (connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {
printf("Connect failed with error: %ld\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
printf("Connected to server.\n");
// 在这里可以进行数据发送和接收的操作
// 关闭Socket
closesocket(clientSocket);
WSACleanup();
return 0;
}
在这个例子中,connect
函数用于连接到指定的服务器。如果连接成功,程序将输出 “Connected to server.”。