Linux socket编程

陆续开始复习一下网络知识,把以前的东西全部捡回去

服务端:

/*
 * File:   main.cpp
 * Author: ziqiao
 *
 * Created on 2011年4月15日, 上午11:06
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SERVPORT 3333 /* Server listeing prot */
#define BACKLOG 10 /* maximum servering size */

using namespace std;

/*
 *
 */
int main(int argc, char** argv) {
    int sock_fd; // listening socket
    int client_fd; // client socket
    struct sockaddr_in my_addr;
    struct sockaddr_in remote_addr;
    size_t sin_size;
    if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // TCP
        perror("socket creatation error");
        exit(1);
    }

    bzero(&my_addr, sizeof(my_addr));
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(SERVPORT);
    my_addr.sin_addr.s_addr = htons(INADDR_ANY);
    if (bind(sock_fd, (struct sockaddr *)&my_addr, sizeof (my_addr)) == -1) { // 监听端口
        perror("bind error");
        cout << errno << endl;
        exit(1);
    }
    if (listen(sock_fd, BACKLOG) == -1) { // 监听
        perror("listen error");
        exit(1);
    }
    while (1) {
        sin_size = sizeof(struct sockaddr_in);
        if ((client_fd = accept(sock_fd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) {
            perror("accept error");
            continue;
        }
        cout << "received a connection from " << inet_ntoa(remote_addr.sin_addr) << endl;
        if (!fork()) { // create subprocess to handle
            if (send(client_fd, "Hello, you are connectedn", 26, 0) == -1)
                perror("send error");
            close(client_fd);
            exit(0);
        }
    }
    close(sock_fd);
    return 0;
}

客户端:

/*
 * File:   main.cpp
 * Author: ziqiao
 *
 * Created on 2011年4月15日, 下午5:02
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SERVPORT 3333 /* Server listeing prot */

using namespace std;

/*
 *
 */
int main(int argc, char** argv) {
    int sock_fd; // socket
    struct sockaddr_in remote_addr;
    int len;
    char buf[1024];
    if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // TCP
        perror("socket creatation error");
        exit(1);
    }

    bzero(&remote_addr, sizeof(remote_addr));
    remote_addr.sin_family = AF_INET;
    remote_addr.sin_port = htons(SERVPORT);
    remote_addr.sin_addr.s_addr = htons(0xFF000000);

    if ((connect(sock_fd, (struct sockaddr*)&remote_addr, sizeof(remote_addr))) == -1) {
        perror("connect error");
        exit(1);
    }
    if ((len = recv(sock_fd, buf, 1024, 0)) == -1) {
        perror("recv error");
        exit(1);
    }
    buf [len] = 0;
    cout << "Received: " << buf << endl;

    close(sock_fd);
    return 0;
}

posted on   小橋流水  阅读(142)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示