如何在Linux环境下使用Socket进行TCP编程?

在Linux环境下进行TCP Socket编程,主要涉及以下几个步骤和接口:

TCP的Socket编程流程

如何在Linux环境下使用Socket进行TCP编程?插图1
(图片来源网络,侵删)

1、创建套接字:使用socket()函数创建一个新的套接字。

2、绑定地址信息:通过bind()函数将套接字与特定的IP地址和端口号绑定。

3、监听连接:服务端使用listen()函数开始监听来自客户端的连接请求。

4、接受连接:通过accept()函数接受已完成三次握手的连接。

5、数据传输:使用send()recv()函数发送和接收数据。

如何在Linux环境下使用Socket进行TCP编程?插图3
(图片来源网络,侵删)

6、关闭连接:使用close()函数关闭套接字。

TCP Socket的接口

函数 描述
socket() 创建套接字。
bind() 绑定套接字到特定地址。
listen() 使套接字变为被动监听状态,准备接受连接。
accept() 从已完成连接的队列中获取连接。
connect() 建立到指定地址的连接。
send() 发送数据。
recv() 接收数据。
close() 关闭套接字。

代码示例

以下是一个简单的TCP服务器和客户端的代码示例:

服务器端代码

如何在Linux环境下使用Socket进行TCP编程?插图5
(图片来源网络,侵删)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
    int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sockfd < 0) {
        printf("Socket creation failed
");
        exit(EXIT_FAILURE);
    }
    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_addr.sin_port = htons(8080);
    if (bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
        perror("Bind failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    listen(sockfd, 10);
    struct sockaddr_in cli_addr;
    socklen_t clilen = sizeof(cli_addr);
    int newsockfd = accept(sockfd, (struct sockaddr*)&cli_addr, &clilen);
    if (newsockfd < 0) {
        perror("Accept failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    char buffer[256];
    int n = read(newsockfd, buffer, 255);
    if (n < 0) {
        perror("Read failed");
        close(newsockfd);
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    printf("Received message: %s
", buffer);
    n = write(newsockfd, "Hello from server", 16);
    if (n < 0) {
        perror("Write failed");
        close(newsockfd);
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    close(newsockfd);
    close(sockfd);
    return 0;
}

客户端代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
    int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sockfd < 0) {
        printf("Socket creation failed
");
        exit(EXIT_FAILURE);
    }
    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serv_addr.sin_port = htons(8080);
    if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
        perror("Connect failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    const char* message = "Hello from client";
    if (send(sockfd, message, strlen(message), 0) < 0) {
        perror("Send failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    char buffer[256];
    int n = read(sockfd, buffer, 255);
    if (n < 0) {
        perror("Read failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }
    printf("Received message: %s
", buffer);
    close(sockfd);
    return 0;
}

这些代码示例展示了如何在Linux环境下使用TCP协议进行基本的Socket编程。

以上内容就是解答有关socket tcp编程linux的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/72239.html

(0)
上一篇 2024年10月9日 09:49
下一篇 2024年10月9日 10:00

相关推荐