1. Socket網絡編程

1. 藉助服務器實現小寫轉大寫的程序:服務器

  客戶端:發送任意小寫字母到服務器端。網絡

  服務器端:接收小寫字母,轉爲大寫,回傳給客戶端,而後客戶端顯示到屏幕。socket

  

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <arpa/inet.h>    //結構體struct sockaddr_in的頭文件
#include <ctype.h>        //toupper()函數頭文件

#define SERV_IP "127.0.0.1"    //IP地址
#define SERV_PORT 6666        //端口號不能大於65535,1000如下的端口號通常給系統使用,用戶使用端口號通常從3000以上

int main(void)
{
    int lfd, cfd;
    struct sockaddr_in serv_addr, clie_addr;
    socklen_t clie_addr_len;
    char buf[BUFSIZ];//操做系統內嵌的宏BUFSIZ,指定buf大小
    int n, i;

    lfd = socket(AF_INET, SOCK_STREAM, 0);

    //初始化結構體
    serv_addr.sin_family = AF_INET;                    //ipv4
    serv_addr.sin_port = htons(SERV_PORT);             //htons端口號轉化(本地host轉爲網絡network)
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);    //htonl IP地址轉化(本地host轉爲網絡network) INADDR_ANY表示本地有效任意IP(直接就是數值類型)

    bind(lfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

    listen(lfd, 128);//同時容許128個客戶端向我發起鏈接(默認值爲128,最大上限就是128)

    clie_addr_len = sizeof(clie_addr);//求出客戶端clie_addr結構體(IP、端口)的長度
    cfd = accept(lfd, (struct sockaddr *)&clie_addr, &clie_addr_len);//阻塞等待

    while (1) {
        n = read(cfd, buf, sizeof(buf));//n爲實際讀到的字節
        for (i = 0; i < n; i++)
            buf[i] = toupper(buf[i]);    //小寫轉爲大寫
        write(cfd, buf, n);
    }

    close(lfd);//關閉文件描述符
    close(cfd);

    return 0;
}

  開啓兩個終端,終端1編譯並執行服務端程序:函數

    

  此時服務器程序運行到accept(),並阻塞等待。測試

  終端2執行:spa

    

  nc命令中,n表明Network,c表明Connect <nc簡稱「腦殘」>操作系統

  經常使用nc來測試服務端程序。3d

相關文章
相關標籤/搜索