linux下socket调试

  在调试pcie板卡驱动的过程中由于要搭建测试环境,在web前端与pcie板卡之间采用socket进行通信。要测试的就是linux系统的pc机能发送一个文件给pcie板卡,然后再接收到pcie板卡处理后的文件。

  工程是之前的同事留下的,没有交接。调试过程及出现的问题如下所述:

  (1)编译pcie驱动源码。

  (2)加载该驱动模块。

  (3)编译服务(测试环境)源码,包含socket server.

  (4)运行服务,运行了socket server。

  该服务已经被添加到系统中,linux下查看服务的命令:$ps aux,通过该命令可以看到服务的pid号,运行状态等信息。

  该服务中包含两个子线程,每个子线程绑定一个端口。在调试过程中添加了打印信息,第一次运行server的时候可以看到socket创建成功,绑定端口成功 。但是再次运行该服务,server就会出现端口绑定失败,用命令查看该端口号:

            

  可以看到该端口已经被之前运行的服务占用,服务的pid号为2568。

这时需要先“杀死”(关闭)之前运行的相同名字的服务,所使用的命令为:

          

  这样的话,编译之后的服务就可以再次正常的运行了。需要注意的是再次运行服务的时候先把之前的进程关掉把端口释放出来。

(5)编译客户端(client)并运行。

  运行client后,server端打印:打开文件失败。分析client端传送的数据可知,client端发送给server的只是文件目录而非文件。

  于是调试linux下socket发送文件的问题,参考网上相关文件,需要在client端首先打开文件并写入buffer中。

  然而在client端打开文件的时候又报错,这时就考虑到应该是文件目录没有正确给出。

  之前写的文件目录为:fromfile="/home/xilinx/test/guangmang-1.ts";

  修改之后的文件目录为:fromfile="/home/lcy/xilinx/test/guangmang-1.ts";

  修改之后client可以正确打开文件。出现这个问题的原因就是自己对Linux了解的太少。

  回过头来想想client端可以这样打开文件,那么server端应该也能这样打开文件啊,于是修改pcie驱动server端文件目录格式,编译运行(别忘了先关闭之前的服务),运行client,可以看到server端能正确打开文件。

  socket的调试完成。

时间: 2024-10-07 13:06:05

linux下socket调试的相关文章

Linux知识(5)----LINUX下GDB调试

参考资料: 1.LINUX下GDB调试

Linux下Socket编程

http://blog.chinaunix.net/uid-20733992-id-3450058.html 原文地址:Linux下Socket编程 作者:yulianliu1218 Linux下Socket编程 什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket接口. Socket接口设计者最先是将接口放在Unix操作系统里面

Linux下Socket编程的端口问题( Bind error: Address already in use )

Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误: Bind error: Address already in use 虽然用Ctrl+C强制结束了进程,但错误依然存在,用netstat -an |grep 5120和ps aux |grep 5120都还能看到刚才用Ctrl+C“强制结束”了的进程,端口还是使用中,只好每次用kill结束进程,

Linux下socket编程,附带tcp例子

1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问

Linux下arm-none-eabi-gdb调试STM32

一.环境描述 硬件开发板:野火STM32开发板 下载器与调试接口:Jlink + JTAG 操作系统:虚拟机VMware6.5 + Ubuntu12.0.4 调试工具:arm-none-eabi-gdb 调试服务器:JLink GDB Server 调试工程目标文件:LED_Test.elf 二.步骤 1.安装Jlink驱动 参考Linux下STM32开发环境的搭建 2.安装交叉编译链arm-none-eabi-gcc 参考Linux下STM32开发环境的搭建 3.编译工程以生成elf文件 参考

Linux下gdb调试

关于gdb的其他客套话不多说,直接进入正题. 一.gdb基本命令列表: 命令 解释 简写 file 装入想要调试的可执行文件 无 list 列出产生执行文件源代码的一部分 l next 执行一行源代码但不进入函数内部 n step 执行一行源代码而且进入函数内部 s run 执行当前被调试的程序 r continue 继续执行程序 c quit 终止gdb q print 输出当前指定变量的值 p break 在代码里设置断点 b info break 查看设置断点的信息 ib delete 删

Linux下socket编程基本知识

本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linux网络编程 Linux网络编程|人工智能物联网 1.概念 1.1套接字(socket) Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如TCP/UDP等网络协议进行网络通讯的手段. Linux中的网络编程通过socket接口实现,socket既是

linux下线程调试 ulimit core

在linux 下写线程程序的同学估计都遇到过找bug找到崩溃的情况,多线程情况下bug的追踪实在是不容易. 现在我来介绍一个好用的方法 ulimit core. 先简单介绍一下ulimit是个什么(你也可以man ulimit自己查看). "'当系统中的一些程序在遇到一些错误以及crash时,系统会自动产生core文件记录crash时刻系统信息,包括内存和寄存器信息,用以程序员日 后debug时可以使用.这些错误包括段错误.非法指令.总线错误或用户自己生成的退出信息等等,一般地,core文件在当

linux下dubbo调试 ---telnet命令

linux下启动dubbo服务端, 怎么调试? 方法有二: 1. 自己写简单消费者功能,进行各种情况测试.(这确实是有必要的) 2. 使用telnet直接连接上dubbo,使用命令调用,然后调试.(这是本文的初衷) 下面,主要介绍怎么用 Telnet 连接dubbo吧: 1. 查看提供者暴露的端口 2. 使用telnet登录dubbo,进行调用 3. 查看提供者都提供了什么服务,ls命令,ls com.cxxx.xxxx 4. 调用方法,invoke com.cxxx dubbo> invoke