TCP、UDP客户端

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

TCP客户端

#include <mystdio.h>

#define CLI_PORT 6666
#define CLI_IP "192.168.124.210"

int main(int argc, const char *argv[])//argv[1] IP  argv[2] 端口号
{
    if(argc <3)
    {
        printf("请在命令传参端口号和IP地址\n");
        return -1;
    }
    //创建流式套接字文件
    int cfd = socket(AF_INET,SOCK_STREAM,0);
    if(cfd < 0)
    {
        perror("socket");
        return -1;
    }
    printf("socket seccuss cfd = %d  __%d__\n",cfd,__LINE__);
    //允许端口号重复使用
    int reuse = 1;
    if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
    {
        perror("setsockopt");
        return -1;
    }
    
    //填充客户端自身的地址信息,给bind函数绑定使用;
    struct sockaddr_in cin;
    cin.sin_family = AF_INET;
    cin.sin_port   = htons(CLI_PORT);
    cin.sin_addr.s_addr   = inet_addr(CLI_IP);
    

    //填充服务器的地址信息,给connet函数使用
    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(atoi(argv[1]));
    sin.sin_addr.s_addr = inet_addr(argv[2]);
    
    //连接指定的服务器
    if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)
    {
        perror("connect");
        return -1;
    }
    printf("connet seccuss __%d__\n",__LINE__);
    
    
    char buf[128]="";
    ssize_t res;
    while(1)
    {
        //从终端输入数据
        printf("请输入数据>>>\n");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1] = '\0';
        //发送数据
        res = send(cfd,buf,sizeof(buf),0);
        if(res < 0)
        {
            perror("send");
            return -1;
        }
    
        //接收
        bzero(buf,sizeof(buf));
        res = recv(cfd,buf,sizeof(buf),0);
        if(res < 0)
        {
            perror("recv");
            return -1;
        }
        else if(0 == res)
        {
            printf("服务器下线 __%d__\n",__LINE__);
            break;
        }
        printf("%s __%d__",buf,__LINE__);
        
    
    }

    close(cfd);

    return 0;
}文章来源地址https://www.toymoban.com/news/detail-857662.html

UDP客户端

#include <mystdio.h>

#define PORT 8888
#define IP "192.168.124.210"

int main(int argc, const char *argv[])
{
    int cfd = socket(AF_INET,SOCK_DGRAM,0);
    if(cfd < 0)
    {
        fprintf(stderr,"line:%d",__LINE__);
        perror("sockaddr");
        return -1;
    }
    printf("创建报式套接字成功 cfd=%d __%d__\n",cfd,__LINE__);
    //允许端口被重复使用
    int reuse = 1;
    if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
    {    
        fprintf(stderr,"line:%d",__LINE__);
        perror("setsockopt");
        return -1;
    }
    //填充服务器的地址信息
    struct sockaddr_in sin;
    sin.sin_family         = AF_INET;
    sin.sin_port         = htons(PORT);
    sin.sin_addr.s_addr = inet_addr(IP);


    char buf[128] = "";
    struct sockaddr_in rcv;
    socklen_t addrlen = sizeof(rcv);
    while(1)
    {
        bzero(buf,sizeof(buf));
        printf("请输入信息>>>\n");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1] = '\0';
        if(sendto(cfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin))<0)
        {
            fprintf(stderr,"line:%d",__LINE__);
            perror("sendto");
            return -1;
        }
        if(strcmp(buf,"quit") == 0)
        {
            break;
        }
        printf("发送成功\n");

        bzero(buf,sizeof(buf));
        if(recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr*)&rcv,&addrlen)<0)
        {
            fprintf(stderr,"line:%d",__LINE__);
            perror("recvfrom");
            return -1;
        }
        if(strcmp(buf,"quit") == 0)
        {
            break;
        }
        printf("[%s:%d]  %s  __%d__\n",\
                inet_ntoa(rcv.sin_addr),ntohs(rcv.sin_port),buf,__LINE__);
        }

    close(cfd);
    return 0;
}

机械臂

#include <mystdio.h>

#define CLI_PORT 6666
#define CLI_IP "192.168.124.210"

int main(int argc, const char *argv[])//argv[1] IP  argv[2] 端口号
{
    if(argc <3)
    {
        printf("请在命令传参端口号和IP地址\n");
        return -1;
    }
    //创建流式套接字文件
    int cfd = socket(AF_INET,SOCK_STREAM,0);
    if(cfd < 0)
    {
        perror("socket");
        return -1;
    }
    printf("socket seccuss cfd = %d  __%d__\n",cfd,__LINE__);
    //允许端口号重复使用
    int reuse = 1;
    if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
    {
        perror("setsockopt");
        return -1;
    }

    //填充服务器的地址信息,给connet函数使用
    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(atoi(argv[1]));
    sin.sin_addr.s_addr = inet_addr(argv[2]);
    
    //连接指定的服务器
    if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))<0)
    {
        perror("connect");
        return -1;
    }
    printf("connet seccuss __%d__\n",__LINE__);
    
    int fd = open("/dev/input/event1",O_RDONLY);
    if(fd<0)
    {
        perror("open");
        return -1;
    }
        
    struct input_event ev;
    
    char buf[5]={0xff,0x02,0x00,30,0xff};
    unsigned char str[5] = {0xff,0x02,0x01,20,0xff};
    if(send(cfd,buf,sizeof(buf),0)< 0)
    {
        perror("send");
        return -1;
    }
    if(send(cfd,str,sizeof(str),0)< 0)
    {
        perror("send");
        return -1;
    }

    while(1)
    {
        if(read(fd,&ev,sizeof(ev))<0)
        {
            perror("read");
            return -1;
        }

        switch(ev.code*ev.value)
        {
        case 17:
            buf[3] += 5;
            if(buf[3]>90)
                buf[3] = 90;
            break;
        case 31:
            buf[3] -= 5;
            if(buf[3] < -90)
                buf[3] = -90;
            break;
        case 30:
            str[3] -= 5;
            if(str[3] < 0)
                str[3] = 0;
            break;
        case 32:
            str[3] += 5;
            if(str[3] >180 )
                str[3] = 180;
            break;
        default:
            continue;
        }
        
        if(send(cfd,buf,sizeof(buf),0)<0)
        {
            perror("send");
            return -1;
        }
        if(send(cfd,str,sizeof(str),0)<0)
        {
            perror("send");
            return -1;
        }

    }
    close(cfd);

    return 0;
}

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

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

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

相关文章

  • socket的使用 | TCP/IP协议下服务器与客户端之间传送数据

    谨以此篇,记录TCP编程,方便日后查阅笔记 注意:用BufferedWriter write完后,一定要flush;否则字符不会进入流中。去看源码可知:真正将字符写入的不是write(),而是flush()。 服务器端代码: 客户端代码: 运行后结果: 服务器端: 客户端: 参考资料: https://www.bilibili.com/vid

    2024年02月09日
    浏览(58)
  • 《TCP/IP网络编程》阅读笔记--基于TCP的服务器端/客户端

    目录 1--TCP/IP协议栈 2--TCP服务器端默认函数调用顺序 3--TCP客户端的默认函数调用顺序 4--Linux实现迭代回声服务器端/客户端 5--Windows实现迭代回声服务器端/客户端 6--TCP原理 7--Windows实现计算器服务器端/客户端         TCP/IP协议栈共分 4 层,可以理解为数据收发分成了 4 个层

    2024年02月10日
    浏览(59)
  • TCP IP网络编程(五) 基于TCP的服务器端、客户端 (补充)

    回声客户端出现的问题 在上一节基于TCP的服务器端、回声客户端中,存在问题: 如果数据太大,操作系统就有可能把数据分成多个数据包发送到客户端,客户端有可能在尚未收到全部数据包时就调用read函数 问题出在客户端,而不是服务器端,先来对比一下客户端与服务器端

    2024年02月09日
    浏览(62)
  • TCP、UDP客户端

    TCP客户端 #include mystdio.h #define CLI_PORT 6666 #define CLI_IP \\\"192.168.124.210\\\" int main(int argc, const char *argv[])//argv[1] IP  argv[2] 端口号 {     if(argc 3)     {         printf(\\\"请在命令传参端口号和IP地址n\\\");         return -1;     }     //创建流式套接字文件     int cfd = socket(AF_INET,SOCK

    2024年04月25日
    浏览(32)
  • Socket网络编程(TCP/IP)实现服务器/客户端通信。

    一.前言 回顾之前进程间通信(无名管道,有名管道,消息队列,共享内存,信号,信号量),都是在同一主机由内核来完成的通信。 那不同主机间该怎么通信呢? 可以使用Socket编程来实现。 Socket编程可以通过网络来实现实现不同主机之间的通讯。 二.Socket编程的网络模型如

    2024年02月08日
    浏览(83)
  • 【网络编程】——基于TCP协议实现回显服务器及客户端

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 TCP提供的API主要有两个类 Socket ( 既会给服务器使用也会给客

    2024年02月03日
    浏览(62)
  • 【Java】网络编程与Socket套接字、UDP编程和TCP编程实现客户端和服务端通信

    为什么需要网络编程? 现在网络普及程序越来越高,网络上保存着我们日常生活中需要的各种资源,使用程序通过网络来获取这些资源的过程就需要网络编程来实现。 什么是网络编程? 网络编程,指网络上的主机,通过不同的进程以程序的方式实现网络通信(网络数据传输)

    2024年02月17日
    浏览(73)
  • JavaEE & UDP简易翻译服务器 & 网络编程示例2 & TCP回显服务器,回显客户端

    禁止白嫖 T T 点点赞呗 这个翻译器主要是在上一章的回显服务器和回显客户端上进行修改 修改了计算响应的过程, 即process方法 1.1 重写方法 重写方法是Java中的一种重要手段 指在一个类的子类里,对父类的一个方法进行重新定义! 而父类的权限级别要大于等于子类~ 【除了

    2023年04月16日
    浏览(56)
  • 【无标题】TCP,UDP,DNS以及配置网关IP地址和在ensp中,在客户端用域名或IP地址获取服务器的文件的实验

    PDU:协议数据单元 应用层:数据报文 传输层:数据段 网络层:数据包 数据链路层:数据帧 物理层:比特流(电流)   应用层的常见协议: HTTP----基于TCP协议 占据80端口号 超文本传输协议 HTTPS----基于TCP协议 占据443端口号 安全传输协议 SSH----基于TCP协议 占据22端口号 安全外

    2024年02月04日
    浏览(49)
  • FPGA实现 TCP/IP 协议栈 客户端 纯VHDL代码编写 提供4套vivado工程源码和技术支持

    FPGA实现 TCP/IP 协议栈 客户端 纯VHDL代码编写 提供4套vivado工程源码和技术支持 没玩过TCP网络通信都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前网上fpga实现udp协议的源码满天飞,我这里也有不少,但用FPGA纯源码实现TCP的项目却很少,能上

    2024年02月04日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包