我是靠谱客的博主 秀丽八宝粥,最近开发中收集的这篇文章主要介绍C语言最简单的socket通讯实例—echo服务器C语言最简单的socket通讯实例—echo服务器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C语言最简单的socket通讯实例—echo服务器

本文致力于实现最简单的socket通讯实例。根据以下代码实例,先运行服务端,再运行客户端进行连接通讯。

原理图

socket通讯原理

socket通讯echo服务器实例:

Server端代码:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
//定义监听端口,根据需要修改
#define PORT 8888
#define MAXSIZE 1024

int main(int argc, char const *argv[])
{
    //创建socket
    int sfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sfd == -1) {
        printf("create socket error!n");
        return -1;
    }
    //构造地址
    struct sockaddr_in saddr;
    memset(&saddr, 0, sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(PORT);
    saddr.sin_addr.s_addr = INADDR_ANY;
    //使用上面构造的地址绑定socket
    if (bind(sfd, (struct sockaddr *)&saddr, sizeof(struct sockaddr)) == -1) {
        printf("bind socket error!, errno=%sn", strerror(errno));
        return -1;
    }
    //监听socket
    if (listen(sfd, 8) == -1) {
        printf("listen error!n");
        return -1;
    }
    //构造地址用于接受socket后写入客户端地址
    struct sockaddr_in peer_saddr;
    socklen_t peer_len = sizeof(struct sockaddr);
    memset(&peer_saddr, 0, sizeof(peer_saddr));
    //阻塞直到收到客户端发送连接请求,接受请求
    int client = accept(sfd, (struct sockaddr *)&peer_saddr, &peer_len);
    if (client == -1) {
        printf("accept error!,errno=%sn", strerror(errno));
        return -1;
    }
    else {
        printf("accept client: %s:%dn", inet_ntoa(peer_saddr.sin_addr), peer_saddr.sin_port);
    }
    //与客户端通讯
    for (;;) {
        char buffer[MAXSIZE] = {0};
        read(client, buffer, MAXSIZE);
        printf("read:%sn", buffer);
        write(client, buffer, strlen(buffer));
        if (strcmp(buffer, "q") == 0) {
            printf("close server!n");
            close(client);
            break;
        }
    }
    close(sfd);
    return 0;
}

Client端代码:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
//定义连接服务器IP,根据服务端IP地址修改
#define IPADDRESS "192.168.3.3"
//定义连接服务器端口,根据服务端监听端口修改
#define SERV_PORT 8888
#define MAXSIZE 1024

int main(int argc, char *argv[])
{
    int sockfd;
    struct sockaddr_in servaddr;
    sockfd = socket(AF_INET, SOCK_STREAM, 0);//创建socket
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(SERV_PORT);
    inet_pton(AF_INET, IPADDRESS, &servaddr.sin_addr);
    connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));//连接socket
    //与客户端进行通讯
    for (;;) {
        char buf[MAXSIZE] = {0};
        scanf("%s", buf);
        printf("sent msg:%sn", buf);
        write(sockfd, buf, strlen(buf));
        memset(buf, 0, sizeof(buf));
        read(sockfd, buf, MAXSIZE);
        printf("read msg:%sn", buf);
        if (strcmp(buf, "q") == 0) {
            printf("close client!n");
            close(sockfd);
            break;
        }
    }
    return 0;
}

最后

以上就是秀丽八宝粥为你收集整理的C语言最简单的socket通讯实例—echo服务器C语言最简单的socket通讯实例—echo服务器的全部内容,希望文章能够帮你解决C语言最简单的socket通讯实例—echo服务器C语言最简单的socket通讯实例—echo服务器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部