huanayun
hengtianyun
vps567
莱卡云

[Linux操作系统]Socket编程入门教程——从基础到实践|socket编程基本步骤,Socket编程入门教程

PikPak

推荐阅读:

[AI-人工智能]免翻墙的AI利器:樱桃茶·智域GPT,让你轻松使用ChatGPT和Midjourney - 免费AIGC工具 - 拼车/合租账号 八折优惠码: AIGCJOEDISCOUNT2024

[AI-人工智能]银河录像局: 国内可靠的AI工具与流媒体的合租平台 高效省钱、现号秒发、翻车赔偿、无限续费|95折优惠码: AIGCJOE

[AI-人工智能]免梯免翻墙-ChatGPT拼车站月卡 | 可用GPT4/GPT4o/o1-preview | 会话隔离 | 全网最低价独享体验ChatGPT/Claude会员服务

[AI-人工智能]边界AICHAT - 超级永久终身会员激活 史诗级神器,口碑炸裂!300万人都在用的AI平台

本文介绍了Linux操作系统下Socket编程的基础知识和实践步骤,包括Socket编程的基本概念、基本步骤以及相关实践操作,旨在帮助读者从入门到掌握Socket编程的核心技巧。

本文目录导读:

  1. Socket编程基础
  2. Socket编程实践

Socket编程是计算机网络编程中非常重要的一部分,它为网络通信提供了基础,通过Socket编程,我们可以实现不同主机之间的数据传输,本文将为你详细介绍Socket编程的基础知识,帮助初学者快速入门。

Socket编程基础

1、Socket概念

Socket起源于UNIX操作系统,它被定义为“一个通信端点”,在网络通信过程中,Socket负责数据的发送和接收,在TCP/IP协议中,Socket可以看作是IP地址和端口号的组合。

2、Socket类型

Socket编程中有两种主要的Socket类型:TCP(传输控制协议)和UDP(用户数据报协议)。

- TCP:提供可靠的、面向连接的服务,在TCP通信过程中,数据包按照顺序传输,且每个数据包都会被确认,适用于对数据可靠性要求较高的场景。

- UDP:提供不可靠的、无连接的服务,在UDP通信过程中,数据包可能丢失或重复,且不保证顺序,适用于对数据实时性要求较高的场景。

3、Socket函数

Socket编程涉及以下几个主要函数:

- socket():创建Socket。

- bind():将Socket绑定到指定的IP地址和端口号。

- listen():设置Socket为监听模式,等待客户端连接。

- accept():接收客户端的连接请求。

- cOnnect():连接到指定的服务器。

- send():发送数据。

- recv():接收数据。

- close():关闭Socket。

Socket编程实践

1、TCP Socket编程示例

以下是一个简单的TCP Socket编程示例,包括服务器端和客户端。

服务器端代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    const char* hello = "Hello from server";
    // 创建socket文件描述符
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }
    // 绑定socket到指定的IP地址和端口号
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(8080);
    if (bind(server_fd, (struct sockaddr*)&address, sizeof(address))<0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    // 设置socket为监听模式
    if (listen(server_fd, 3) < 0) {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    // 接受客户端连接
    if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen))<0) {
        perror("accept");
        exit(EXIT_FAILURE);
    }
    // 读取客户端数据
    read(new_socket, buffer, 1024);
    printf("message from client: %s
", buffer);
    // 发送数据到客户端
    send(new_socket, hello, strlen(hello), 0);
    printf("Hello message sent
");
    // 关闭socket
    close(server_fd);
    return 0;
}

客户端代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main() {
    struct sockaddr_in address;
    int sock = 0, valread;
    struct sockaddr_in serv_addr;
    char buffer[1024] = {0};
    const char* hello = "Hello from client";
    // 创建socket文件描述符
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("
 Socket creation error 
");
        return -1;
    }
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(8080);
    // 转换地址从文本到二进制
    if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
        printf("
Invalid address/ Address not supported 
");
        return -1;
    }
    // 连接到服务器
    if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
        printf("
Connection Failed 
");
        return -1;
    }
    // 发送数据到服务器
    send(sock, hello, strlen(hello), 0);
    printf("Hello message sent
");
    // 读取服务器数据
    valread = read(sock, buffer, 1024);
    printf("message from server: %s
", buffer);
    // 关闭socket
    close(sock);
    return 0;
}

2、UDP Socket编程示例

以下是一个简单的UDP Socket编程示例,包括服务器端和客户端。

服务器端代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.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 sockfd; 
    char buffer[BUFFER_SIZE] = {0}; 
    struct sockaddr_in servaddr, cliaddr; 
    // 创建socket文件描述符 
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { 
        perror("socket creation failed"); 
        exit(EXIT_FAILURE); 
    } 
    servaddr.sin_family = AF_INET; 
    servaddr.sin_addr.s_addr = INADDR_ANY; 
    servaddr.sin_port = htons(PORT); 
    // 绑定socket到指定的IP地址和端口号 
    if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) { 
        perror("bind failed"); 
        exit(EXIT_FAILURE); 
    } 
    struct sockaddr_in cliaddr; 
    int len = sizeof(cliaddr); 
    // 接收客户端数据 
    int n = recvfrom(sockfd, (char *)buffer, BUFFER_SIZE,  
                MSG_WAITALL, (struct sockaddr *)&cliaddr, 
                &len); 
    buffer[n] = ''; 
    printf("Client: %s
", buffer); 
    // 发送数据到客户端 
    char *hello = "Hello from server"; 
    sendto(sockfd, (const char *)hello, strlen(hello),  
        0, (const struct sockaddr *)&cliaddr, len); 
    printf("Hello message sent.
"); 
    // 关闭socket 
    close(sockfd); 
    return 0; 
}

客户端代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.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 sockfd; 
    char buffer[BUFFER_SIZE] = {0}; 
    struct sockaddr_in servaddr; 
    // 创建socket文件描述符 
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { 
        perror("socket creation failed"); 
        exit(EXIT_FAILURE); 
    } 
    servaddr.sin_family = AF_INET; 
    servaddr.sin_port = htons(PORT); 
    // 转换地址从文本到二进制 
    if (inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr) <= 0) { 
        printf("
Invalid address/ Address not supported 
"); 
        exit(EXIT_FAILURE); 
    } 
    // 发送数据到服务器 
    const char *hello = "Hello from client"; 
    sendto(sockfd, (const char *)hello, strlen(hello),  
        0, (const struct sockaddr *)&servaddr,  
            sizeof(servaddr)); 
    printf("Hello message sent.
"); 
    // 接收服务器数据 
    int n = recvfrom(sockfd, (char *)buffer, BUFFER_SIZE,  
                MSG_WAITALL, (struct sockaddr *)NULL, 
                NULL); 
    buffer[n] = ''; 
    printf("Server: %s
", buffer); 
    // 关闭socket 
    close(sockfd); 
    return 0; 
}

Socket编程是计算机网络编程的基础,通过本文的学习,相信你已经对Socket编程有了基本的了解,在实际开发过程中,可以根据实际需求选择合适的Socket类型,掌握Socket函数的使用方法,实现网络通信功能,随着技术的不断进步,Socket编程在分布式系统、云计算等领域发挥着重要作用,希望你能在此基础上继续深入学习,提高自己的编程能力。

50个中文相关关键词:Socket编程,入门教程,网络通信,Socket概念,Socket类型,TCP,UDP,Socket函数,服务器端,客户端,bind,listen,accept,connect,send,recv,close,示例,实践,服务器,客户端,数据传输,地址绑定,端口号,监听模式,

bwg Vultr justhost.asia racknerd hostkvm pesyun Pawns


本文标签属性:

Socket编程入门教程:socket编程怎么运行

原文链接:,转发请注明来源!