socket编程

 


服务端

socket->bind->listen->accept

#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;

int main(int argc, char **argv)
{
    unsigned short port = 8080;
    if (argc > 1) {
        port = atoi(argv[1]);
    }

    // 1.create socket
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock <= 0) {
        cerr << "creator socker error" << endl;
        return -1;
    }
    cout << "sock = " << sock << endl;

    // bind port
    sockaddr_in saddr;
    memset(&saddr, 0sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(port);// 主机字节序转换为网络字节序
    saddr.sin_addr.s_addr = htonl(0);
    if (::bind(sock, (sockaddr *)&saddr, sizeof(saddr)) != 0) {
        cerr << "bind port " << port << " failed!"<< endl; 
    }
    cout << "bind port " << port << " success" << endl;

    // listen
    listen(sock, 10);

    // accept
    sockaddr_in caddr;// 客户端地址
    socklen_t len = 0;
    int client_sock = accept(sock, (sockaddr*)&caddr, &len);
    cout << "client sock = " << client_sock << endl;

    //send
    char buffer[1024] = "welcome to xms";
    int length = send(client_sock, buffer, strlen(buffer), 0);
    cout << "length = " << length << endl;

    //recv
    length = recv(client_sock, buffer, sizeof(buffer) - 10);
    if (length > 0) {
        buffer[length] = '\0';
        cout << buffer << endl;
    }

    close(sock);

    return 0;
}

客户端

socket->connect

#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;

int main(int argc, char **argv)
{
    unsigned short port = 8080;
    const char *ip = "127.0.0.1";
    if (argc > 2) {
        ip = argv[1];
        port = atoi(argv[2]);
    }

    // 1.create socket
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock <= 0) {
        cerr << "creator socker error" << endl;
        return -1;
    }

    sockaddr_in saddr;
    memset(&saddr, 0sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(port);// 主机字节序转换为网络字节序
    saddr.sin_addr.s_addr = inet_addr(ip);
    int res = connect(sock, (sockaddr *)&saddr, sizeof(saddr));
    if (res != 0) {
        cerr << "connect " << ip << " : " << port << " failed" << endl;
    }

    char buffer[1024] = {0};
    int len = recv(sock, buffer, sizeof(buffer) - 10);
    if (len > 0) {
        cout << buffer << endl;
    }

    strcpy(buffer, "send from client");
    len = send(sock, buffer, strlen(buffer), 0);

    close(sock);

    return 0;
}
posted @   mengchao  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
主题色彩