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

相关文章
相关标签/搜索