C++的socket()
时间: 2024-12-26 16:04:24 浏览: 5
C++的socket编程是指使用C++语言进行网络编程,通过socket接口实现网络通信。Socket是一种用于在不同计算机之间进行通信的端点。它提供了一种机制,使得应用程序能够通过网络进行数据的发送和接收。
在C++中进行socket编程通常包括以下几个步骤:
1. **创建Socket**:使用`socket()`函数创建一个新的socket。
2. **绑定地址和端口**:使用`bind()`函数将socket绑定到一个特定的IP地址和端口号。
3. **监听连接**:对于服务器端,使用`listen()`函数监听连接请求。
4. **接受连接**:使用`accept()`函数接受客户端的连接请求。
5. **发送和接收数据**:使用`send()`和`recv()`函数进行数据的发送和接收。
6. **关闭连接**:使用`close()`函数关闭socket连接。
以下是一个简单的C++ socket编程示例,展示了如何创建一个服务器和客户端进行通信:
```cpp
// 服务器端代码
#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int serverSocket, clientSocket;
struct sockaddr_in serverAddr, clientAddr;
socklen_t addrLen = sizeof(clientAddr);
// 创建socket
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket < 0) {
std::cerr << "Error creating socket" << std::endl;
return 1;
}
// 设置服务器地址和端口
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY; // 监听所有可用接口
serverAddr.sin_port = htons(8080); // 端口号
// 绑定socket
if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
std::cerr << "Error binding socket" << std::endl;
return 1;
}
// 监听连接
if (listen(serverSocket, 5) < 0) {
std::cerr << "Error listening on socket" << std::endl;
return 1;
}
std::cout << "Server listening on port 8080" << std::endl;
// 接受连接
clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &addrLen);
if (clientSocket < 0) {
std::cerr << "Error accepting connection" << std::endl;
return 1;
}
std::cout << "Client connected" << std::endl;
// 接收数据
char buffer[1024];
int bytesRead = recv(clientSocket, buffer, sizeof(buffer) - 1, 0);
if (bytesRead < 0) {
std::cerr << "Error receiving data" << std::endl;
return 1;
}
buffer[bytesRead] = '\0';
std::cout << "Received data: " << buffer << std::endl;
// 关闭连接
close(clientSocket);
close(serverSocket);
return 0;
}
```
```cpp
// 客户端代码
#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
int clientSocket;
struct sockaddr_in serverAddr;
// 创建socket
clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket < 0) {
std::cerr << "Error creating socket" << std::endl;
return 1;
}
// 设置服务器地址和端口
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080); // 服务器端口号
if (inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr) <= 0) {
std::cerr << "Invalid address/Address not supported" << std::endl;
return 1;
}
// 连接服务器
if (connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
std::cerr << "Connection Failed" << std::endl;
return 1;
}
// 发送数据
const char* message = "Hello, Server!";
send(clientSocket, message, strlen(message), 0);
std::cout << "Message sent: " << message << std::endl;
// 关闭连接
close(clientSocket);
return 0;
}
```
以上代码展示了如何使用C++进行基本的socket编程。服务器端监听端口并接受客户端连接,客户端连接到服务器并发送消息。
阅读全文