Ubuntu下进行Socket编程

2023-05-16

龙云尧个人博客,转载请注明出处。

CSDN地址:http://blog.csdn.net/Michael753951/article/details/72553287

个人blog地址:http://yaoyl.cn/ubuntu-xia-jin-xing-socket-bian-cheng/


这是第一次进行网络编程,献给Ubuntu了。

由于需要结合OpenGL搭建的虚拟环境进行实验,为了将虚拟环境中的实验参数传送至另一台PC机协同工作。我们选择使用网络编程进行数据通行。本次博客先运行两个demo体会一下利用C++进行Socket编程。

实验进行

我们在本次实验中将运行两个demo,第一个demo用来进行文件传输,第二个demo用来进行窗口对话。

demo1

本次demo采用TCP流,demo代码来自【 Linux网络编程:socket文件传输范例 】。

代码编写

我们打开codeblocks,建立两个项目(project),新建的时候选择控制台(console)程序。第一个项目命名为“TCP_client”,第二个项目命名为“TCP_server”。然后将博客中的代码拷贝进main.cpp中,ctrl+F9进行编译。

注意,在这里当我们编译到 close(new_server_socket_fd); 的时候,编译器会报错 error: ‘close’ was not declared in this scope。如下图所示。

tcp_server_error

我参考CSDN中【‘close’ was not declared in this scope 】添加了unistd.h库头,编译成功。

#include<unistd.h>

在TCP_server编译成功之后,我们开始编译TCP_client。同样在将客户端复制下来之后,我们首先添加unistd.h库头,接着我们直接编译。

首先是在编译到if(inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) == 0)的时候,编译器报error: ‘inet_pton’ was not declared in this scope错误如下图所示。

tcp_client_error_1

我参考了CSDN中【‘inet_pton’ was not declared in this scope 】添加了arpa/inet.h库头。

#include <arpa/inet.h>

再次编译的时候,依然遇到了报错。此时在编译到close(fp);的时候报错error: invalid conversion from ‘FILE* {aka _IO_FILE*}’ to ‘int’ [-fpermissive]。如下图所示。

tcp_client_error_2

我们发现本行代码中fp为文件指针,在C语言中,文件的打开和关闭应该是调用fopen和fclose,在打开文件部分,作者确实调用了fopen进行打开文件,但是在关闭的时候错用成了close,所以造成本次报错,我们将close换成fclose,就能够编译成功了。

执行项目

我们在两份项目都能够正确编译执行以后,将开始正式进行实验。

首先关闭当前IDE,因为在codeblocks中,不能在同一个进程中打开两个main函数。我们需要分别进入之前已经建立好的TCP_server项目所在的文件夹和TCP_client项目所在的文件夹,分别代开他们的cbp文件,打开两个codeblocks进程,这样就能够同时打开两个console窗口了。(如果不能同时打开的话,可以刹参考CSDN中【CodeBlocks启动多个进程实例的做法 】的设置方法)

打开后server和client两个界面如图所示。

运行示意图

首先我们在server所在的文件夹中放置一个demo.jpeg文件作为源文件,然后我们可以发现此时client所在的文件夹中没有该文件。接着我们在TCP_client窗口中输入demo.jpeg

我们发现执行成功之后,client所在的文件夹中多出来了一个demo.jpeg文件,打开它和server中的demo.jpeg进行对比,发现结果一致。

运行完成

故而我们认为本次demo运行没问题。

demo2

第二份demo参考自【Linux C Socket编程原理及简单实例】。

本次代码能够直接编译运行,不会有报错信息,测试截图如下所示。

demo2

小结

本次demo作为Socket编程的入门测试以及环境测试,下一篇博客将对Socket编程进行深入的分析的总结。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu下进行Socket编程 的相关文章

随机推荐

  • Vector 简介和优缺点

    引用 xff1a https blog csdn net taiyang1987912 article details 50351827 vector向量相当于一个数组 在内存中分配一块连续的内存空间进行存储 支持不指定vector大小的存
  • PC电脑控制手机iphone(iOS 11、iOS 12、iOS 13),需越狱

    Veency是一款可以用电脑控制你的iPhone的插件 xff0c 作者是大名鼎鼎的Cydia的创始人Jay Freeman xff0c 也就是Saurik 但是最高支持到IOS9 xff0c 在IOS 10以上无法使用 基于Veency
  • 【Windows】Shellcode免杀,过360、火绒、Defender 静态及主防

    Shellcode xff0c 顾名思义是一段拿来执行的代码片段 xff0c 我们可以使用Shellcode来完成我们需要的任务 弹窗的代码 xff0c 可以被认为是一段Shellcode xff0c 获取某个模块的基址的代码 xff0c
  • Metasploit体系结构和目录

    一 Metasploit体系结构 一 xff09 基础库文件 metasploit基础库文件位于源码根目录路径下的libraries目录中 xff0c 包括Rex framework core和framework base三部分 Rex是整
  • Metasploit Framework Handbook

    文章目录 前言MsFrameworkMetasploit诞生发展体系结构功能阶段工具管理基本命令情报搜集网络服务渗透测试 Refference 前言 众所周知Metasploit工具是一款强大的渗透测试利器 xff0c 在渗透测试中堪称一条
  • 简单无锁队列的实现和使用

    无锁队列越来越流行 xff0c 在特定的场合使用不同的无锁队列 xff0c 可以起到节省锁开销 xff0c 提高程序效率 Linux内核中有无锁队列的实现 xff0c 可谓简洁而不简单 核心判断部分利用了整数溢出机制 xff0c 这个有很多
  • 关于网狐棋牌6603源码的整理、编译和搭建

    最近换工作 xff0c 趁着有一段清闲时间 xff0c 整理了一下网狐棋牌的源码 xff0c 这份源码下载很久了 xff0c 一直呆在硬盘 这次正好好好看看 网狐的代码质量很高 xff0c 流露出来的代码也比较完整 xff0c 基本上都能编
  • Pycharm:注释、删除所有注释

    1 单行注释 2 39 39 39 多行注释 39 39 39 3 删除所有注释 CTRL 43 R进入替换模式 xff0c 勾选右上角正则表达式 xff0c 然后在搜索框输入 xff0c Replace All即可
  • Outlook 2016 pst/ost邮件数据文件迁移实现

    当使用outlook 2016新建Email账户的时候 xff0c 其数据文件 xff08 ost文件 xff09 总是被保存在C盘默认目录 C Users 用户名 AppData Local Microsoft Outlook 下 xff
  • 跟我一起学习VIM - vim插件合集

    前两天同事让我在小组内部分享一下VIM xff0c 于是我花了一点时间写了个简短的教程 虽然准备有限 xff0c 但分享过程中大家大多带着一种惊叹的表情 xff0c 原来编辑器可以这样强大 xff0c 这算是对我多年来使用VIM的最大鼓舞吧
  • linux最简单搭建邮件服务器

    一 概述 xff1a 在配置邮件服务器之前 xff0c 先解释几个概念 通常使用Email都很容易 xff0c 但是Internet的邮件系统是通过几个复杂的部分连接而成的 xff0c 对于最终用户而言 xff0c 我们熟悉的Outlook
  • ROS导航小车经验总结

    经验教训 QS1 rviz地图与gazebo不同步 详细描述 工作空间 xff1a 仿真项目 文件位置 course03 启动urdf gazebo launch union launch xff08 模型启动文件 和 gazebo环境 x
  • 使用libcurl发送post请求

    C语言代码如下 xff1a include lt stdio h gt include lt string h gt include lt curl curl h gt int main int argc char argv CURL cu
  • 访问带有用户名、密码的URL

    很简单 xff0c 举例如下 xff1a HttpURLConnection urlConnection 61 HttpURLConnection url span class hljs preprocessor openConnectio
  • ROS下驱动双雷达

    ROS下驱动SLAMETC的A2和A3雷达步骤如下 xff1a 1 连上激光雷达并进入至 dev文件夹中查看ttyUSB xff1f 的编号 2 使用sudo chmod 777 ttyUSB 来更改USB端口权限 3 调整A2和A3激光雷
  • Usart 串口发送数据包 两种方式(遍历结构体,指针数组)

    Usart 串口发送数据包 两种方式 xff08 结构体 xff0c 指针数组 xff09 1 结构体指针 1 1 结构体和联合体 叙述 xff1a 这种直观性比较 xff0c 利用联合体和结构体的形式组成数据包 xff0c 通过结构体指针
  • netfilter 讲解 ,讲的很好

    Netfilter为多种网络协议 xff08 IPv4 IPv6 ARP等 xff09 各提供了一套钩子函数 在IPv4中定义了5个钩子函数 xff0c 这些钩子函数在数据包流经协议栈的5个关键点被调用 这就像有5个钓鱼台 xff0c 在每
  • python字典添加元素和删除元素

    1 添加字典元素 方法一 xff1a 直接添加 xff0c 给定键值对 pycharm aa 61 39 人才 39 60 39 英语 39 39 english 39 39 adress 39 39 here 39 print aa 39
  • Verilog中奇偶校验位的计算方法

    偶校验 xff1a 数据和校验位中1的总数为偶数 xff0c 则认为数据无误 xff0c 否则标识数据有误 xff1b 奇校验 xff1a 数据和校验位中1的总数为奇数 xff0c 则认为数据无误 xff0c 否则标识数据有误 xff1b
  • Ubuntu下进行Socket编程

    龙云尧个人博客 xff0c 转载请注明出处 CSDN地址 xff1a http blog csdn net Michael753951 article details 72553287 个人blog地址 xff1a http yaoyl c