Linux socket网络编程

本文详细介绍了网络编程中服务器端和客户端使用socket进行通信的过程,包括socket创建、绑定、监听、接受连接、数据收发及关闭连接的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程socket套接字

服务器端

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

int main()
{
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1)
    {
        exit(1);
    }

    struct sockaddr_in saddr, caddr;
    memset(&saddr, 0, sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6000);
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    int res = bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr));
    if (res == -1)
    {
        printf("bind err\n");
        exit(1);
    }
    res = listen(sockfd, 5);
    if (res == -1)
    {
        exit(1);
    }
    while (1)
    {
        socklen_t len = sizeof(caddr);
        int c = accept(sockfd, (struct sockaddr *)&caddr, &len);
        if (c < 0)
        {
            continue;
        }
        printf("connect c = %d\n", c);
        while (1)
        {
            char buff[128] = {0};
            int n =recv(c, buff, sizeof(buff), 0);
            if(n==0){
            	break;
            }
            printf("buff = %s\n", buff);
            send(c, "ok", 2, 0);
        }
        close(c);
    }
}

服务端步骤:
1.socket() 创建监听套接字
2.bind() 绑定端口和ip
3.lsiten()使用监听套接字建立监听窗口个数
4.accetp()接收连接请求,建立连接
5.recv()接收信息
6.send()发送信息
7.close()关闭监听套接字

客户端

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

int main()
{
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1)
    {
        exit(1);
    }

    struct sockaddr_in saddr;
    memset(&saddr, 0, sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6000);
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    int res = connect(sockfd, (struct sockaddr *)&saddr, sizeof(saddr));
    if (res == -1)
    {
        printf("connect err\n");
        exit(1);
    }
    while (1)
    {
        char buff[128] = {0};
        fgets(buff, 127, stdin);
        send(sockfd, buff, sizeof(buff), 0);
        memset(buff,0,sizeof(buff));
        recv(sockfd, buff, sizeof(buff), 0);
        printf("buff=%s\n", buff);
    }
    close(sockfd);  
}

客户端步骤:
1.socket()建立连接套接字
2.connect()发送连接请求
3.send()发送信息
4.recv()接收信息
5.close()关闭连接套接字

总结

先启动服务器端,后启动客户端,127.0.0.1为默认主机地址,仅用于测试时使用,运行成功建立连接后,客户端循环发送信息到服务器端,服务器端返回"ok"到客户端。
如果客户端不发送连接请求,服务器端阻塞在accept(),在建立连接后,如果客户端不发送信息,服务器阻塞在recv();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值