C语言中的socket编程实例代码

当我们需要在计算机程序中实现网络通信时,Socket 编程成为了一种非常重要的方式。C 语言是一种经典的编程语言,通过 C 语言实现 Socket 编程也是非常常见的。在接下来的讲解中,我们将会提供一个 C 语言中的 Socket 编程实例代码的完整攻略,并且会给出两条示例说明,让大家更好地理解代码的运用。

什么是 Socket 编程?

Socket 是一种通信机制,它位于传输层和应用层之间,用于实现网络协议族的通信,比如 TCP 和 UDP。Socket 编程利用 Socket 通信机制,在计算机程序之间实现数据的传输。

Socket 编程通常由客户端和服务端两个部分组成,客户端负责向服务端请求数据或服务,服务端则负责提供数据或服务。在 C 语言中,我们通过调用系统库函数实现 Socket 编程。

C 语言中的 Socket 编程实例代码

下面是一个简单的 C 语言中的 Socket 编程实例代码的模板。在这个示例代码中,我们通过一个简单的示例来说明如何使用 Socket 编程实现客户端向服务端发送一条消息的功能。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define PORT 8080

int main() {
    int client_sock;
    struct sockaddr_in server_addr;
    char buffer[1024] = {0};
    if ((client_sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("\n Socket creation error \n");
        return -1;
    }
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    if(inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr)<=0) {
        printf("\nInvalid address/ Address not supported \n");
        return -1;
    }
    if (connect(client_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        printf("\nConnection Failed \n");
        return -1;
    }
    char *hello = "Hello from client";
    send(client_sock, hello, strlen(hello), 0);
    printf("Message sent\n");
    return 0;
}

在上述示例代码中,我们可以看到 main 函数中分别完成了以下几个步骤:

  1. Socket 创建:通过调用系统库函数 socket() 创建一个 Socket。
  2. 设定服务器地址:使用结构体 server_addr 设置服务器的地址和端口号。
  3. 连接服务器:通过调用系统库函数 connect() 连接服务器。
  4. 发送消息:通过调用系统库函数 send() 发送消息。

在以上步骤中,我们也使用到了一些系统库函数,包括 socket()、inet_pton()、connect() 和 send() 函数。

示例说明1: Socket 服务端程序

下面是一个简单的 C 语言中的 Socket 服务端程序的示例代码。在这个示例代码中,我们通过使用 Socket 编程,实现了一个简单的 Echo 服务器,当客户端向服务器发送一条消息后,服务器会返回一条 Echo 回应消息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define PORT 8080

int main() {
    int server_fd, client_sock;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};

    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("Socket 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 ((client_sock = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
        perror("accept failed");
        exit(EXIT_FAILURE);
    }

    int valread = read(client_sock, buffer, 1024);
    printf("%s\n",buffer );
    send(client_sock , buffer , strlen(buffer) , 0 );
    printf("Echo message sent\n");

    return 0;
}

在上述代码中,我们使用到了以下几个系统函数:socket()、bind()、listen()、accept() 和 read() 函数。在服务器程序中,我们设定了 Echo 协议,服务器会将客户端传来的消息原样返回。当客户端请求连接时,服务器调用 accept() 函数接收连接请求,并通过 read() 函数接收客户端传来的消息。接收到消息后,服务器通过 send() 函数将消息返回到客户端。

示例说明2: Socket UDP 通信

TCP 是一种面向连接的协议,它需要在连接建立后才能进行数据传输,而 UDP 是一种无连接的协议,可以直接向对方发送数据包。下面是一个简单的 C 语言中的 Socket UDP 通信的示例代码,它实现了客户端向服务端发送一个数据包的功能。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define PORT 8080

int main() {
    int sock;
    struct sockaddr_in server_addr;
    char buffer[1024] = {0};

    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        printf("\n Socket creation error \n");
        return -1;
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    server_addr.sin_addr.s_addr = INADDR_ANY;

    char *hello = "Hello from client";
    sendto(sock, (const char *)hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *)&server_addr, sizeof(server_addr));
    printf("Message sent\n");
    close(sock);
    return 0;
}

在 UDP 通信中,我们使用了 SOCK_DGRAM 类型的 Socket,它不需要调用 connect() 函数与对方建立连接,直接调用 sendto() 函数发送数据包即可。

结束语

以上就是关于 C 语言中的 Socket 编程实例代码的一个完整攻略,以及两条示例说明。Socket 编程是非常常见和重要的技能,希望大家通过本文能够更好地理解 Socket 编程的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中的socket编程实例代码 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++实现折半查找

    实现折半查找的过程可以分为以下几步: 步骤一:准备有序数组 折半查找需要在一个有序数组中进行查找,因此首先需要准备一个有序数组,可以使用C++中的std::sort来进行排序。 #include <iostream> #include <algorithm> int main() { int arr[] = {2, 3, 4, 5, …

    C 2023年5月22日
    00
  • 浅析Java异常处理中断言的使用

    浅析Java异常处理中断言的使用 Java异常处理机制允许程序在出现错误和异常时进行优雅的处理,从而保证程序的安全性和稳定性。而其中断言(assertion)机制则是一种非常强大的调试工具,可以在程序出现错误时,中断程序并给出特定的提示,帮助程序员更快地定位和修复问题。 在本篇攻略中,我们将分为以下几个部分,详细讲解Java异常处理中断言的原理、用法及注意事…

    C 2023年5月23日
    00
  • 深入了解C++异常处理

    深入了解C++异常处理 C++异常处理是一种处理程序错误的机制,在代码出现错误时,以一种标准化的方式抛出异常,传递异常信息,然后可以选择在程序的其他部分捕获并处理它们,以便程序可以以一种优雅的方式退出或恢复。在这篇文章中,我们将介绍C++异常处理的基本概念,并提供示例来解释异常的情况。 异常处理的三个基本部分 C++异常处理的三个基本部分是:抛出异常、捕获异…

    C 2023年5月22日
    00
  • win11系统快捷键大全 附详细功能介绍

    下面是针对“win11系统快捷键大全 附详细功能介绍”的完整攻略: Win11系统快捷键大全 基础快捷键 Win键:打开/关闭“开始”菜单 Win+D:显示/隐藏桌面 Win+E:打开资源管理器 Win+L:锁定计算机 Win+S:打开搜索面板 Ctrl+C:复制所选内容 Ctrl+V:粘贴上复制的内容 Ctrl+A:选中所有内容 Ctrl+Z:撤销上一页操…

    C 2023年5月23日
    00
  • vscode调用c项目后怎么引用dll?

    在VSCode中调用C语言项目,如果需要使用动态链接库(DLL)的话,一般需要进行以下步骤: 创建动态链接库 先编写动态链接库的代码并生成DLL文件。例如,编写一个示例代码,将其保存为 “hello.c”,编译并生成DLL文件 “hello.dll”。示例代码如下: #include <stdio.h> #include <stdlib.h…

    C 2023年5月23日
    00
  • C++实现Dijkstra算法

    C++实现Dijkstra算法攻略 算法简介 Dijkstra算法是一个在加权图中查找单源最短路径的贪心算法。在开始时,所有节点被分为两个集合:已知最短路径的节点和未知最短路径的节点。对于未知最短路径的节点,算法通过已知最短路径的节点来更新这些节点到源点的距离,最终得到源点到图中所有节点的最短路径。 算法步骤 初始化图中所有节点的距离为无穷大,除源点的距离为…

    C 2023年5月22日
    00
  • C语言实现高精度的加法

    接下来我将为您讲解如何使用C语言实现高精度加法的完整攻略: 1. 需求分析 首先,我们需要明确需求:有两个非常大的数需要相加,由于超过了C语言中所能表示的数据范围,因此需要使用“高精度”计算,即手写计算方法,通过逐位计算来实现。 2. 解决方案 实现高精度加法的思路如下: 将两个数用字符数组存储 将两个数的个位数开始逐位相加,大于10则产生进位 将结果按照顺…

    C 2023年5月23日
    00
  • python和c语言的主要区别总结

    下面是对“Python和C语言的主要区别总结”的详细讲解: Python和C语言的主要区别总结 1. 语法与代码风格的不同 Python的语法相较于C语言更简洁易懂,可以更快速地学习和上手。例如,Python不需要声明变量的类型,也不需要分号来结束语句,而C语言则需要这些语法规则。 代码风格上,Python通常使用缩进来表示代码块,而C语言使用花括号来表示。…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部