赞
踩
bind
: 服务器端需要使用 bind
将套接字绑定到特定的端口和IP地址(通常是 INADDR_ANY
),这样它才能接收发送到这个端口的数据包。listen
和 accept
: 因为UDP是无连接的协议,服务器不需要监听连接或接受连接。bind
: UDP客户端通常不需要显式地绑定端口。系统会自动为客户端选择一个临时端口。listen
和 accept
: 因为UDP是无连接的协议,客户端只需要知道服务器的IP地址和端口,然后直接发送数据即可。bind
: 服务器需要使用 bind
将套接字绑定到特定的端口和IP地址,以便接收连接请求。listen
: 绑定端口后,服务器需要调用 listen
函数,使套接字进入监听状态,准备接受连接请求。accept
: 当有客户端连接请求时,服务器使用 accept
函数接受连接,并创建一个新的套接字用于通信。connect
: TCP客户端不需要显式地绑定端口。客户端调用 connect
函数,系统会自动分配一个端口并连接到服务器的IP地址和端口。listen
和 accept
: 客户端只需要建立连接,不需要监听和接受连接。- bool CUdpServer::CreateSocket()
- {
- WSADATA wsaData;
- if (0 != WSAStartup(MAKEWORD(2, 2), &wsaData))
- {
- return false;
- }
-
- m_Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (INVALID_SOCKET == m_Socket)
- {
- return false;
- }
-
- sockaddr_in address;
- address.sin_family = AF_INET;
- address.sin_port = htons(m_nPort);
- address.sin_addr.s_addr = htonl(INADDR_ANY);
- if (SOCKET_ERROR == bind(m_Socket, (SOCKADDR *)&address, sizeof(address)))
- {
- return false;
- }
-
- return true;
- }
TCP服务器
- bool CTcpServer::CreateSocket()
- {
- WSADATA wsaData;
- if (0 != WSAStartup(MAKEWORD(2, 2), &wsaData))
- {
- return false;
- }
-
- m_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (INVALID_SOCKET == m_Socket)
- {
- return false;
- }
-
- sockaddr_in address;
- address.sin_family = AF_INET;
- address.sin_port = htons(m_nPort);
- address.sin_addr.s_addr = htonl(INADDR_ANY);
- if (SOCKET_ERROR == bind(m_Socket, (SOCKADDR *)&address, sizeof(address)))
- {
- return false;
- }
-
- if (SOCKET_ERROR == listen(m_Socket, SOMAXCONN))
- {
- return false;
- }
-
- return true;
- }
TCP客户端
- bool CTcpClient::CreateSocket()
- {
- WSADATA wsaData;
- if (0 != WSAStartup(MAKEWORD(2, 2), &wsaData))
- {
- return false;
- }
-
- m_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (INVALID_SOCKET == m_Socket)
- {
- return false;
- }
-
- sockaddr_in serverAddress;
- serverAddress.sin_family = AF_INET;
- serverAddress.sin_port = htons(m_nPort);
- serverAddress.sin_addr.s_addr = inet_addr(m_ServerIP);
-
- if (SOCKET_ERROR == connect(m_Socket, (SOCKADDR *)&serverAddress, sizeof(serverAddress)))
- {
- return false;
- }
-
- return true;
- }
总结:
bind
,客户端直接发送和接收即可。bind
和 listen
,客户端需要 connect
,不需要 bind
或 listen
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。