网络编程day2

这篇具有很好参考价值的文章主要介绍了网络编程day2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网络编程day2,嵌入式学习-网络编程,网络

TCP的基本通信

服务器端

#include <head.h>
#define SER_PORT 8888                  //服务器端口号
#define SER_IP  "192.168.125.211"      //服务器客户端

int main(int argc, const char *argv[])
{
    //1、创建用于连接的套接字
    int sfd = socket(AF_INET, SOCK_STREAM, 0);  
    //参数1:通信域,表明使用的是ipv4协议
    //参数2:通信方式,使用TCP通信
    //参数3:0表示之前已经指定协议 IPPROTO_TCP
    
    if(sfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("sfd = %d\n", sfd);               //3


    //将端口号快速重用函数
    int reuse = 1;
    if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1)
    {
        perror("setsockopt error");
        return -1;
    }
    printf("端口号快速重用成功\n");

    //2、给当前套接字绑定IP地址和端口号
    //2.1填充要绑定的地址信息结构体
    struct sockaddr_in sin;
    sin.sin_family =     AF_INET;        //通信域
    sin.sin_port =         htons(SER_PORT);  //端口号
    sin.sin_addr.s_addr =     inet_addr(SER_IP);    //ip地址

    //2.2 绑定
    if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) == -1)
    {
        perror("bind error");
        return -1;
    }
    printf("bind success %s %s %d\n", __FILE__, __func__, __LINE__);

    //3、将套接字设置成监听状态
    if(listen(sfd, 128) == -1)
    {
        perror("listen error");
        return -1;
    }
    printf("listen success %s %s %d\n", __FILE__, __func__, __LINE__);

    //4、阻塞等待客户端的链接请求
    //4.1定义容器接收客户端的地址信息
    struct sockaddr_in cin;                  //用于接收地址信息
    socklen_t socklen = sizeof(cin);          //用于接收地址信息的大小

    int newfd = -1;
    //4.2 接收客户端的链接
    newfd = accept(sfd, (struct sockaddr*)&cin, &socklen);   
    if(newfd == -1)
    {
        perror("accept error");
        return -1;
    }
    printf("[%s:%d]发来链接请求 %s %s %d\n", \
           inet_ntoa(cin.sin_addr), ntohs(cin.sin_port),__FILE__, __func__, __LINE__);

    //5、跟客户端进行消息通信
    char buf[128] = "";
    while(1)
    {
        //将数组清空
        bzero(buf, sizeof(buf));

        //读取客户端发来的消息
        //int res = read(newfd, buf, sizeof(buf));
        int res = recv(newfd, buf, sizeof(buf), 0);
        if(res == 0)
        {
            printf("客户端已经下线\n");
            break;
        }
        printf("[%s:%d] : %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);

        //给客户端发消息
        strcat(buf, "*_*");

        //write(newfd, buf, sizeof(buf));
        send(newfd, buf, sizeof(buf), 0);
        printf("发送成功\n");
    }

    //6、关闭套接字
    close(newfd);
    close(sfd);
    return 0;
}

客户端

#include <head.h>
#define SER_PORT  8888             //服务器端口号
#define SER_IP "192.168.125.211"    //服务器ip地址
#define CLI_PORT 6666                //客户端的端口号
#define CLI_IP "192.168.125.211"       //客户端ip地址

int main(int argc, const char *argv[])
{
    //1、创建用于通信的套接字文件描述符
    int cfd = -1;
    cfd = socket(AF_INET, SOCK_STREAM, 0);
    if(cfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("cfd = %d\n", cfd);            //3

    //2、绑定(可选)
    //2.1 填充地址信息结构体
    struct sockaddr_in cin;
    cin.sin_family = AF_INET;
    cin.sin_port = htons(CLI_PORT);
    cin.sin_addr.s_addr = inet_addr(CLI_IP);
    //2.2绑定
    if(bind(cfd, (struct sockaddr*)&cin, sizeof(cin)) == -1)
    {
        perror("bind error");
        return  -1;
    }
    printf("bind  success\n");
    
    //3、连接服务器
    //3.1 填充服务器地址信息结构体
    struct sockaddr_in sin;
    sin.sin_family =     AF_INET;
    sin.sin_port =         htons(SER_PORT);
    sin.sin_addr.s_addr = inet_addr(SER_IP);
    //3.2 连接
    if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) == -1)
    {
        perror("connect error");
        return -1;
    }
    printf("connect success\n");
    
    //4、收发数据
    char buf[128] = "";
    while(1)
    {
        //清空数组
        bzero(buf, sizeof(buf));

        printf("请输入>>>");
        fgets(buf, sizeof(buf), stdin);   //从终端输入数据
        buf[strlen(buf)-1] = 0;          //将换行改为'\0'

        //发送给服务器
        send(cfd, buf, sizeof(buf), 0);
        printf("发送成功\n");
        if(strcmp(buf, "quit") == 0)
        {
            break;
        }

        //接收服务器发来的消息
        recv(cfd, buf, sizeof(buf), 0);
        printf("[%s:%d]:%s\n", SER_IP, SER_PORT, buf);
    }

    //5、关闭套接字
    close(cfd);

    return 0;
}

实现机械臂控制文章来源地址https://www.toymoban.com/news/detail-800234.html

#include <head.h>

int main(int argc, const char *argv[])
{
    //1、创建套接字
    int cfd = socket(AF_INET, SOCK_STREAM, 0);
    if(cfd == -1)
    {
        perror("socket eror");
        return -1;
    }

    //2、绑定(可选)
    
    //3、连接服务器
    //3.1 填充地址信息结构体
    struct sockaddr_in cin;
    cin.sin_family = AF_INET;
    cin.sin_port = htons(8888);
    cin.sin_addr.s_addr = inet_addr("192.168.125.171");
    //3.2连接服务器
    if(connect(cfd, (struct sockaddr*)&cin, sizeof(cin)) == -1)
    {
        perror("connect error");
        return -1;
    }

    //4、向服务器发送消息
    char rbuf[5] = {0xff, 0x02, 0x00, 0xA6, 0xff};   //红色臂
    unsigned char bbuf[5] = {0xff, 0x02, 0x01, 0x00, 0xff};   //蓝色臂

    //先发送初始数据
    send(cfd, rbuf, sizeof(rbuf), 0);
    sleep(1);
    send(cfd, bbuf, sizeof(bbuf), 0);

    //通过键盘控制数据的收发
    char ch;
    while(1)
    {
        scanf("%c", &ch);
        getchar();

        //需要对输入的字符多分支选择
        switch(ch)
        {
        case 'W':
        case 'w':
            {
                rbuf[3] += 2;       //增加2度
                if(rbuf[3] >= 90)
                {
                    rbuf[3] = 90;
                }
                send(cfd, rbuf, sizeof(rbuf), 0);
            }
            break;

        case 'q':
            goto END;
        }

    }

END:
    //5、关闭套接字
    close(cfd);


    return 0;
}

到了这里,关于网络编程day2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式学习第二十六天!(网络传输:TCP编程)

            socket   -  connect  -  send  -  recv   -  close         socket   -  bind   -  listen   -  accept   - recv   -  send   -  close         1. connect:               功能: 发送链接请求               参数:                   sockfd: 套接字文件描述符                  

    2024年03月09日
    浏览(69)
  • [嵌入式系统-25]:RT-Thread -12- 内核组件编程接口 - 网络组件 - HTTP编程

    目录 一、HTTP编程概述 1.1 概述 1.2 HTTP 服务器和 HTTP 客户端 二、HTTP Client 2.1 如何配置HTTP Client 2.2 HTTP Client代码实例1:socket发送http报文 2.3 HTTP Client代码实例2:httpc_xx接口收发HTTP报文 2.3.1 接口函数描述 2.3.2 代码实例:httpc_get 2.3.3 代码实例:httpc_post 2.3.4 代码实例:httpc

    2024年02月19日
    浏览(47)
  • 嵌入式:QT Day2

    源码: widget.h second.h widget.cpp second.cpp main.cpp    

    2024年02月15日
    浏览(44)
  • lv7 嵌入式开发-网络编程开发 13 UNIX域套接字

    目录 1 UNIX 域流式套接字 2 UNIX 域数据报套接字 UNIX 域流式套接字(UNIX domain stream socket)是一种在同一台主机上的进程之间进行通信的机制。它不依赖于网络协议栈,而是使用文件系统作为通信的基础。 UNIX 域流式套接字提供可靠的、双向的、面向连接的通信方式。与传统的

    2024年02月07日
    浏览(46)
  • [嵌入式系统-24]:RT-Thread -11- 内核组件编程接口 - 网络组件 - TCP/UDP Socket编程

    目录 一、RT-Thread网络组件 1.1 概述 1.2 RT-Thread支持的网络协议栈 1.3 RT-Thread如何选择不同的网络协议栈 二、Socket编程 2.1 概述 2.2 UDP socket编程 2.3 TCP socket编程 2.4 TCP socket收发数据 RT-Thread 是一个开源的嵌入式实时操作系统(RTOS),它提供了丰富的网络组件用于网络通信。 RT-

    2024年03月12日
    浏览(61)
  • lv7 嵌入式开发-网络编程开发 03 TCP/IP与五层体系结构

    目录 1 TCP/IP协议族体系结构 1.1 OSI与TCP/IP 1.2 TCP/IP 的体系结构  1.3 TCP/IP 体系结构的另一种表示方法 1.4 沙漏计时器形状的 TCP/IP 协议族 2 五层协议的体系结构 2.1 各层的主要功能  2.2 互联网中客户-服务器工作方式 2.3 同时为多个客户进程提供服务  3 练习 是事实上的国际标

    2024年02月07日
    浏览(63)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第二天-TCP编程(物联技术666)

    点赞+关注,功德无量。更多配套资料,欢迎私信。 百度网盘 请输入提取码 百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间 https://pan.baidu.com/s/1F6BR6uTANKKcNnoaCUAZYA?pwd=

    2024年01月18日
    浏览(50)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第三天-UDP编程(物联技术666)

    技术咨询:wulianjishu666 上午:UDP网络编程  下午:UDP聊天程序的设计、select超时控制 教学内容: 1、udp和tcp都是在传输层上的协议,它们的区别 UDP协议与TCP协议的差异: TCP:面向连接,可靠 UDP:无连接,不可靠 ----------------------- UDP协议的优势: 支持广播和多播 UDP没有连接

    2024年01月16日
    浏览(95)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第二天-TCP编程练习(物联技术666)

    点赞+关注,功德无量。更多配套资料,欢迎私信。 百度网盘 请输入提取码 百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间 https://pan.baidu.com/s/1F6BR6uTANKKcNnoaCUAZYA?pwd=

    2024年02月01日
    浏览(55)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第一天-socket编程练习(物联技术666)

    点赞+关注,功德无量。更多配套资料,欢迎私信。 网盘链接:https://pan.baidu.com/s/1NIrDmbm8EtFkB1G8s7E3Sg?pwd=qsoh 提取码:qsoh 1、建立一个服务器和一个客户端,二个之间通信 //--------------------服务器 #include stdio.h #include stdlib.h #include string.h                                    

    2024年02月01日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包