简单的C++ 的socket代码展示
时间: 2023-09-07 07:05:07 浏览: 64
### 回答1:
C 语言的 socket 编程可以通过大量的示例代码来学习。下面是一个简单的 socket 代码的展示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int main()
{
struct addrinfo hints;
struct addrinfo *res;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("www.example.com", "http", &hints, &res);
int sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
connect(sockfd, res->ai_addr, res->ai_addrlen);
// 发送信息
char *msg = "GET / HTTP/1.1\r\n\r\n";
int len;
len = send(sockfd, msg, strlen(msg), 0);
// 接受数据
char buf[4096];
len = recv(sockfd, buf, 4096, 0);
buf[len] = '\0';
printf("Received: %s", buf);
close(sockfd);
return 0;
}
### 回答2:
下面是一个简单的C语言的socket代码展示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE] = {0};
// 创建 socket 文件描述符
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 设置 socket 选项,以允许地址重用
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 将 socket 绑定到指定的地址和端口
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听传入的连接
if (listen(server_fd, 3) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
// 接受连接并创建新的套接字
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
// 从客户端读取数据到缓冲区
valread = read(new_socket, buffer, BUFFER_SIZE);
printf("%s\n", buffer);
// 向客户端发送响应消息
char *response = "Hello from server";
send(new_socket, response, strlen(response), 0);
printf("Response sent\n");
// 关闭连接
close(new_socket);
close(server_fd);
return 0;
}
```
此代码实现了一个简单的TCP服务器,它会创建一个监听指定端口的socket,并接受来自客户端的连接。一旦有连接建立,它会从客户端读取数据并发送响应消息。
注意:为了使此代码正常工作,您需要具备一些基础的网络编程知识。此外,在运行代码之前,请确保端口8080未被其他程序占用。
### 回答3:
下面是一个简单的使用C语言的Socket编程的示例代码:
```c
// server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE] = {0};
char *hello = "Hello from server";
// 创建套接字
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// 设置套接字选项
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt failed");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 绑定套接字到指定端口
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
// 监听套接字,等待客户端连接
if (listen(server_fd, 3) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
// 接受客户端连接
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t *)&addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
// 读取客户端消息
valread = read(new_socket, buffer, BUFFER_SIZE);
printf("%s\n", buffer);
// 向客户端发送消息
send(new_socket, hello, strlen(hello), 0);
printf("Hello message sent\n");
return 0;
}
```
```c
// client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int sock = 0, valread;
struct sockaddr_in serv_addr;
char *hello = "Hello from client";
char buffer[BUFFER_SIZE] = {0};
// 创建套接字
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// 将IP地址从点分十进制转换为二进制
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
perror("invalid address or address not supported");
exit(EXIT_FAILURE);
}
// 连接服务器
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("connection failed");
exit(EXIT_FAILURE);
}
// 向服务器发送消息
send(sock, hello, strlen(hello), 0);
printf("Hello message sent\n");
// 读取服务器消息
valread = read(sock, buffer, BUFFER_SIZE);
printf("%s\n", buffer);
return 0;
}
```
这里提供了服务器端和客户端的代码示例。服务器端使用socket创建套接字,设置选项,绑定端口,监听连接,接受连接,读取客户端消息,然后向客户端发送消息。客户端通过socket创建套接字,设置服务器的地址和端口,连接服务器,然后向服务器发送消息,最后读取服务器的响应消息。这样就实现了一个简单的C语言Socket通信示例。