美文网首页
18.`tcp/udp`学习

18.`tcp/udp`学习

作者: 陈忠俊 | 来源:发表于2020-08-21 16:47 被阅读0次

1.server.c服务器端的代码

#include<stdio.h>
#include<ctype.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<unistd.h>
# define E_MSG(str, value) do{perror(str); return (value);} while(0);

int main(void){
    char buff[128];
    char IP[32];
    struct sockaddr_in serv, clie;
    socklen_t cli_len;

    int s_fd = socket(AF_INET, SOCK_STREAM, 0);
    if(s_fd == -1) E_MSG("socket", -1);
    //对serv变量的成员进行初始化
    serv.sin_family = AF_INET;
    serv.sin_port = htons(8001);
    serv.sin_addr.s_addr = htonl(INADDR_ANY);
    int bb = bind(s_fd, (struct sockaddr *) &serv, sizeof(serv));
    if(bb == -1) E_MSG("bind", -1);
    //将s_fd设置为被动链接,监听客户端连接
    //将客户端的连接放入到未决队列中
    //此前要定义未决队列的长度
    listen(s_fd, 5);
    while(1){
        cli_len = sizeof(clie);
        //从未决队列中取出一个连接处理
        //返回这个连接的描述符,使用该描述符和客户端通信
        int c_fd = accept(s_fd, (struct sockaddr *)&clie, &cli_len);
        if(c_fd == -1) E_MSG("accept", -1);
        //到此时,三次握手成功,可以传输数据
        //从c_fd中读取客户端发来的数据
        //二进制转换成字符
        inet_ntop(AF_INET, &clie.sin_addr, IP, 32);
        printf("Cleint ip: %s\n", IP);
        int r = read(c_fd, buff, 128);
        int i;
        for(i = 0; i < r; i++){
            buff[i] = toupper(buff[i]);
        }
        //将处理结果回送
        write(c_fd, buff, r);
        close(c_fd);
    }
    return 0;
}

2.client.c

#include<stdio.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>

int main(void){
    char buff[128];
    struct sockaddr_in serv;
    char *msg = "hello sky walker...\n";
    //create an socket connection, return file descriptor;
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    if(fd == -1) return -1;

    serv.sin_family = AF_INET;
    serv.sin_port = htons(8001);
    //二进制转换
    inet_pton(AF_INET, "127.0.0.1", &serv.sin_addr);
    //使用fd向服务器发起连接
    int c = connect(fd, (struct sockaddr *)&serv, sizeof(serv));
    if(c == -1) return -1;
    //三次握手成功,向服务器发送数据
    write(fd, msg, strlen(msg) + 1);
    //等待服务器回应
    int r = read(fd, buff, 128);
    write(1, buff, r);
    close(fd);

    return 0;
}

相关文章

  • 18.`tcp/udp`学习

    1.server.c服务器端的代码 2.client.c

  • iOS 网络相关面试题

    问题:TCP、UDP TCP/UDP 传输层协议 ||—— UDP:用户数据报协议 TCP与UDP的区别: 问题...

  • TCP 与 UDP

    TCP 与 UDP(主要说TCP)TCP/UDP端口号TCP/UDP端口号TCP连接的建立TCP连接的建立发送se...

  • 网络编程

    TCP server TCP client UDP server UDP client

  • 计算机网络02 - 传输层

    目录 TCP协议和UDP协议TCP首部TCP连接管理UDP首部 1. TCP协议和UDP协议 TCP协议:面向连接...

  • udp协议

    TCP/IP模型里面的udp学习,当时只知道它在传输层,今天就来学习下。 UDP协议特点: 1.速度比TCP快2....

  • 2018-09-19

    网络面试集 一、TCP/UDP 1、UDP与TCP的区别 TCP(TransmissionControl ...

  • 第三十七天——[网络概述、UDP]

    学习内容:网络概述、UDP收获: 了解了TCP/IP协议(族); 了解了TCP和UDP的区别和联系; 了解了MAC...

  • TCP和UDP的区别

    TCP和UDP的区别: TCP协议和UDP协议特性区别总结: TCP协议可靠;UDP协议不可靠 TCP协议是面向连...

  • SOCKET,TCP/UDP,HTTP,FTP

    转。。。。。。。。 SOCKET,TCP/UDP,HTTP,FTP (一)TCP/UDP,SOCKET,HTTP,...

网友评论

      本文标题:18.`tcp/udp`学习

      本文链接:https://www.haomeiwen.com/subject/lavkghtx.html