c++实现socket
时间: 2023-07-22 18:25:45 浏览: 93
c++ socket编程实例(包含服务端及客户端)
5星 · 资源好评率100%
下面是一个简单的 C++ 程序,用于创建一个基于TCP协议的Socket。这个程序可以作为一个简单的模板,用于实现更复杂的 Socket 程序。
```c++
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>
using namespace std;
int main(int argc, char const *argv[])
{
// 创建 Socket
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == -1)
{
cerr << "Could not create socket" << endl;
return 1;
}
// 把 Socket 绑定到指定的地址和端口
sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(8080);
if (bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address)) < 0)
{
cerr << "Bind failed" << endl;
return 1;
}
// 监听 Socket
listen(server_socket, 3);
// 等待客户端连接
sockaddr_in client_address;
int client_socket;
char message[1024];
cout << "Waiting for a client to connect..." << endl;
while (true)
{
socklen_t client_address_size = sizeof(client_address);
client_socket = accept(server_socket, (struct sockaddr *)&client_address, &client_address_size);
if (client_socket < 0)
{
cerr << "Accept failed" << endl;
return 1;
}
// 从客户端接收消息
memset(message, 0, sizeof(message));
int message_length = read(client_socket, message, sizeof(message));
if (message_length < 0)
{
cerr << "Read failed" << endl;
return 1;
}
cout << "Received message: " << message << endl;
// 向客户端发送消息
const char *response = "Hello from server!";
int response_length = strlen(response);
int bytes_sent = send(client_socket, response, response_length, 0);
if (bytes_sent < 0)
{
cerr << "Send failed" << endl;
return 1;
}
cout << "Response sent" << endl;
// 关闭客户端 Socket
close(client_socket);
}
// 关闭 Server Socket
close(server_socket);
return 0;
}
```
在这个程序中,我们使用了 `socket()` 函数来创建一个 Socket。然后使用 `bind()` 函数将 Socket 绑定到一个 IP 地址和端口上。接下来,使用 `listen()` 函数开始监听客户端连接。在循环中不断地等待客户端连接,并使用 `accept()` 函数接收客户端连接。一旦有客户端连接,我们就可以使用 `read()` 函数从客户端接收消息,使用 `send()` 函数向客户端发送消息,最后使用 `close()` 函数关闭客户端 Socket。
这个程序是一个简单的模板,可以根据需要进行修改,实现更复杂的功能,如多线程处理连接、加密传输等。
阅读全文