首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux C 編程:Socket 網路程式設計完整客戶端/伺服器範例

     編輯:關於C語言

TCP Socket 核心流程

伺服器客戶端
socket()socket()
bind()bind() (可選,指定本地埠)
listen()
accept()connect()
recv/sendsend/recv
close()close()

伺服器端完整碼

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

#define PORT 20000
#define BACKLOG 10
#define BUF_SIZE 255
#define WELCOME "Welcome to server. "

int main(void) {
    int sfd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in saddr = {0}, caddr;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(PORT);
    saddr.sin_addr.s_addr = htonl(INADDR_ANY);

    bind(sfd, (struct sockaddr*)&saddr, sizeof(saddr));
    listen(sfd, BACKLOG);

    while (1) {
        socklen_t len = sizeof(caddr);
        int cfd = accept(sfd, (struct sockaddr*)&caddr, &len);
        char buf[BUF_SIZE];
        time_t now = time(NULL);
        sprintf(buf, "%s%s", WELCOME, ctime(&now));
        printf("Client: %s:%d\n", inet_ntoa(caddr.sin_addr), ntohs(caddr.sin_port));
        send(cfd, buf, BUF_SIZE, 0);
        close(cfd);
    }
    close(sfd);
    return 0;
}

客戶端完整碼

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

#define PORT 20000
#define BUF_SIZE 255

int main(int argc, char *argv[]) {
    if (argc < 2) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); }
    int sfd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in saddr = {0};
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(PORT);
    inet_aton(argv[1], &saddr.sin_addr);

    connect(sfd, (struct sockaddr*)&saddr, sizeof(saddr));
    char buf[BUF_SIZE];
    recv(sfd, buf, BUF_SIZE, 0);
    printf("Server: %s", buf);
    close(sfd);
    return 0;
}

關鍵函數說明

  • htons/htonl:主機序轉網路序(大端序)
  • inet_aton/inet_ntoa:IP 字串與二進位互轉
  • bzero/memset:結構體清零
  • socklen_t:accept 長度參數型別

編譯執行

gcc server.c -o server
gcc client.c -o client
./server &  # 背景執行伺服器
./client 127.0.0.1
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved