首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux tcpip编程

Linux TCP/IP 编程是指在 Linux 操作系统下使用 TCP/IP 协议进行网络通信的编程。

基础概念:

  • TCP(Transmission Control Protocol,传输控制协议):是一种面向连接的、可靠的、基于字节流的传输层通信协议。
  • IP(Internet Protocol,互联网协议):负责在网络中对数据进行路由和分组转发。

优势:

  • 可靠性高:TCP 能保证数据的可靠传输。
  • 广泛兼容:适用于各种网络环境。

类型:

  • TCP 编程:如创建服务器和客户端进行数据传输。
  • UDP 编程:无连接、不可靠但高效的传输。

应用场景:

  • 网络聊天应用。
  • 文件传输服务。
  • 远程登录系统。

常见问题及原因:

  • 连接超时:可能是网络不稳定或服务器未响应。
  • 数据丢失:可能由于网络拥塞或程序错误。

解决方法:

  • 对于连接超时,可以增加超时重试机制。
  • 若数据丢失,优化网络环境,检查程序逻辑确保数据完整发送和接收。

示例代码(简单的 TCP 服务器):

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 8080

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

    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");
        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");
        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("Received: %s
", buffer);
    close(new_socket);
    close(server_fd);
    return 0;
}

示例代码(简单的 TCP 客户端):

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 8080

int main() {
    int sock = 0;
    struct sockaddr_in serv_addr;
    char *message = "Hello from client";

    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(PORT);

    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, message, strlen(message), 0);
    printf("Message sent to server
");
    close(sock);
    return 0;
}
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券