huanayun
hengtianyun
vps567
莱卡云

[Linux操作系统]Socket编程入门教程——从基础到实践|sockets编程,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的基本概念出发,详细讲解了sockets编程的入门技巧和实际应用,旨在帮助读者快速掌握Socket编程的核心要点。

本文目录导读:

  1. Socket基础概念
  2. Socket编程基本流程
  3. 实例分析

Socket编程是计算机网络编程中非常重要的一部分,它为应用程序提供了在网络中传输数据的能力,本文将为您详细介绍Socket编程的基础知识,帮助您快速入门并掌握Socket编程的基本技巧。

Socket基础概念

1、Socket定义

Socket起源于UNIX,是UNIX的BSD版本中加入的网络功能,后来广泛被各大操作系统采用,Socket可以看作是不同计算机之间进行通信的端点,它既可以用于同一台计算机上的进程间通信,也可以用于不同计算机之间的网络通信。

2、Socket类型

Socket有多种类型,常用的有以下几种:

- 流式Socket(SOCK_STREAM):提供可靠的、面向连接的服务,数据传输顺序严格,适用于TCP协议。

- 数据报Socket(SOCK_DGRAM):提供不可靠的、无连接的服务,数据传输顺序不严格,适用于UDP协议。

- 原始Socket(SOCK_RAW):提供原始网络协议接口,可以自定义协议,适用于高级用户。

3、端口

端口是Socket通信过程中用于区分不同服务的逻辑标识符,每个Socket都需要绑定一个端口,以便接收和发送数据,端口号范围从0到65535,其中0到1023为系统端口,1024到49151为注册端口,49152到65535为动态端口。

Socket编程基本流程

1、创建Socket

创建Socket是Socket编程的第一步,在UNIX系统中,可以使用socket()函数创建Socket。

int sock = socket(AF_INET, SOCK_STREAM, 0);

AF_INET表示IPv4地址族,SOCK_STREAM表示流式Socket,0表示使用默认协议。

2、绑定地址和端口

创建Socket后,需要将Socket绑定到一个地址和端口上,可以使用bind()函数实现。

struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(8080);
bind(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));

INADDR_ANY表示监听所有可用的接口,8080为端口号。

3、监听和接收连接

对于服务器端,需要监听来自客户端的连接请求,可以使用listen()函数实现。

listen(sock, 10);

10表示同时可以处理的最大连接数。

当有客户端发起连接请求时,可以使用accept()函数接收连接。

int client_sock = accept(sock, (struct sockaddr *)&client_addr, &client_addr_len);

4、发送和接收数据

建立连接后,可以使用send()和recv()函数发送和接收数据。

send(client_sock, "Hello, client!", 14, 0);
char buffer[1024];
recv(client_sock, buffer, sizeof(buffer), 0);

5、关闭连接

当数据传输完成后,需要关闭Socket连接,可以使用close()函数实现。

close(client_sock);
close(sock);

实例分析

下面通过一个简单的TCP服务器和客户端实例来分析Socket编程的具体实现。

1、TCP服务器

服务器端代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
    int server_sock, client_sock;
    struct sockaddr_in server_addr, client_addr;
    socklen_t client_addr_len = sizeof(client_addr);
    char buffer[1024];
    server_sock = socket(AF_INET, SOCK_STREAM, 0);
    if (server_sock == -1) {
        perror("socket");
        exit(1);
    }
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(8080);
    if (bind(server_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("bind");
        exit(1);
    }
    if (listen(server_sock, 10) == -1) {
        perror("listen");
        exit(1);
    }
    printf("Server is running...
");
    client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &client_addr_len);
    if (client_sock == -1) {
        perror("accept");
        exit(1);
    }
    printf("Received connection from %s:%d
", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
    while (1) {
        int len = recv(client_sock, buffer, sizeof(buffer), 0);
        if (len <= 0) {
            break;
        }
        send(client_sock, buffer, len, 0);
    }
    close(client_sock);
    close(server_sock);
    return 0;
}

2、TCP客户端

客户端代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
    int sock;
    struct sockaddr_in server_addr;
    char buffer[1024];
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
        perror("socket");
        exit(1);
    }
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    server_addr.sin_port = htons(8080);
    if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
        perror("connect");
        exit(1);
    }
    printf("Connected to server...
");
    while (1) {
        fgets(buffer, sizeof(buffer), stdin);
        send(sock, buffer, strlen(buffer), 0);
        int len = recv(sock, buffer, sizeof(buffer), 0);
        if (len <= 0) {
            break;
        }
        printf("Received: %s
", buffer);
    }
    close(sock);
    return 0;
}

本文介绍了Socket编程的基础知识,包括Socket的概念、类型、端口以及Socket编程的基本流程,通过一个简单的TCP服务器和客户端实例,分析了Socket编程的具体实现,希望这篇文章能够帮助您快速入门Socket编程。

关键词:Socket编程, 入门教程, 基础知识, 流式Socket, 数据报Socket, 原始Socket, 端口, 创建Socket, 绑定地址, 监听连接, 接收连接, 发送数据, 接收数据, 关闭连接, TCP服务器, TCP客户端, 实例分析, 总结

bwg Vultr justhost.asia racknerd hostkvm pesyun Pawns


本文标签属性:

Socket编程入门教程:socket编程用什么软件

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