📅  最后修改于: 2023-12-03 14:40:02.556000             🧑  作者: Mango
CC++套接字编程是一种基于网络的通信方法,能够实现进程间的通信和数据传输。该方法之所以被广泛使用,是因为其具有高效、灵活、稳定等特点,因此被广泛应用于互联网、通信和计算机领域。
在CC++中,要使用套接字,必须先创建套接字。创建套接字的方法如下:
int socket(int domain, int type, int protocol);
创建套接字后,需要绑定套接字到一个具体的地址上,以便可以接收来自特定地址和端口的数据。绑定套接字的方法如下:
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
为了处理客户端的连接请求,需要将套接字设置为监听模式。监听套接字的方法如下:
int listen(int sockfd, int backlog);
当客户端连接到服务器时,服务器需要调用accept函数来接受连接请求并创建一个新的套接字用于与客户端通信。接收连接请求的方法如下:
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
连接建立后,服务器和客户端之间可以相互发送和接收数据。发送数据的方法如下:
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
接收数据的方法如下:
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
下面是一个简单的CC++套接字编程示例,它实现了一个简单的客户端和服务器端之间的数据传输:
// 服务器端
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#define PORT 8000
#define BACKLOG 5
int main() {
int sockfd, connfd;
struct sockaddr_in server, client;
char buffer[1024];
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
printf("Create socket error!\n");
exit(-1);
}
// 绑定端口号
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(PORT);
if (bind(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1) {
printf("Bind socket error!\n");
exit(-1);
}
// 监听套接字
if (listen(sockfd, BACKLOG) == -1) {
printf("Listen socket error!\n");
exit(-1);
}
while (1) {
// 接受连接请求
socklen_t addrlen = sizeof(client);
connfd = accept(sockfd, (struct sockaddr *)&client, &addrlen);
if (connfd == -1) {
printf("Accept socket error!\n");
exit(-1);
}
// 处理客户端请求
recv(connfd, buffer, sizeof(buffer), 0);
printf("Receive data: %s\n", buffer);
// 发送数据
char msg[] = "Hello, client!";
send(connfd, msg, strlen(msg), 0);
// 关闭套接字
close(connfd);
}
close(sockfd);
return 0;
}
// 客户端
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
#define PORT 8000
int main() {
int sockfd;
struct sockaddr_in server;
char buffer[1024];
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
printf("Create socket error!\n");
exit(-1);
}
// 连接服务器
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = htons(PORT);
if (connect(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1) {
printf("Connect socket error!\n");
exit(-1);
}
// 发送数据
char msg[] = "Hello, server!";
send(sockfd, msg, strlen(msg), 0);
// 接收数据
recv(sockfd, buffer, sizeof(buffer), 0);
printf("Receive data: %s\n", buffer);
// 关闭套接字
close(sockfd);
return 0;
}
CC++套接字编程是一种基于网络的通信方法,能够实现进程间的通信和数据传输。在使用套接字编程时,需要先创建套接字,然后绑定套接字到一个具体的地址上,接着将套接字设置为监听模式,等待客户端连接请求。当客户端连接到服务器时,服务器需要调用accept函数来接受连接请求并创建一个新的套接字用于与客户端通信。连接建立后,服务器和客户端之间可以相互发送和接收数据。