Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
网络学习营
【网络编程学习】+Jack_Lin+实现一个简单的TCP聊天客户端
发布于 2018-08-01 10:41:29 浏览:1524
订阅该版
* 本帖最后由 Jack_Lin 于 2018-8-1 10:41 编辑 * 大家好,十分荣幸可以参加这一次RT-Thread的网络编程学习。在完成群主布置的任务后,进入第一周作业。下面是我在完成作业时的分析和步骤,如果有什么不对,麻烦大家指教指教。谢谢大家。 首先,我们来先看看第一周作业题目: ![1.png](/uploads/201808/01/103642n2c9rmj090w0rjwe.png) 大体的意思是在"183.193.243.90",端口为11222上存在一个TCP Server,同时这个TCP Server是一个聊天室。可以接受客户端发出的特定指令并返回相应信息。在这里必须注意的是:客户端向Server发送命令时必须在命令后加"
"。否则,Server会认为你发出的命令还没发送完毕,不会解析,也就是不会执行。 看到这个题目后,我没有使用网络编程助手,而是第一时间用Python写了一个TCP Client。利用socket和threading模块实现了一个简易的网络编程助手,部分代码如下: ![2.png](/uploads/201808/01/103642yziiogkn1ikng0g0.png) 可以看到代码中有两个函数,这两个函数分别对应一个线程,用于从服务器接受数据和向服务器发送数据。(注意:python版本为3.6)。 在这个简易网络编程助手,我特别的注意到,当我们输入who和look指令后,服务器会把信息分两次返回,这点会重要。因为我们使用recv函数时,整个线程会Blocked。所以我们在函数中不能多调用一次或者少调用一次。因为当我们多调用一次会做成整个函数Blocked而无法运行;而少调用一次也会让这次返回的信息冲掉下一次返回的信息,做成永远都无法接受到当前命令的返回信息,这是一个很尴尬的问题。如果没明白我说什么,请你自己尝试一下。 因为这种情况,我本人有比较懒,不想处理这些情况。所以我在qemu虚拟机采用“多线程”的方式来实现作业的要求的功能,整体思路和我的python简易网络编程助手一样。更加有趣的是:python的多线程也可以用“多线程”来表示,对此感兴趣,可以查阅相关资料。 程序的总体思路:专门启用一个“线程”来接受服务器返回的信息。其他功能都单独实现。 具体步骤: 1.创建一个TCP Client用于连接远程的服务器。 2.开启一个线程来专门接受服务器发回来的数据。 3.调用相关命令。.. 因为我是新建一个C语言源文件来写作业。在上面所说的步骤之前,首先把先创建的C语言文件添加进项目(假设大家都做过qemu的全部网络实验),在.... t-thread\bsp\qemu-vexpress-a9\packages\samples-latest
etwork\tcpclient文件夹中新建一个文字为homework的c文件,返回上一目录,编辑SConscript文件,添加红色框框中的代码: ![3.png](/uploads/201808/01/103642os7p42y4j6psusz2.png) 然后在...... t-thread\bsp\qemu-vexpress-a9编辑rtconfig.h(在/* network sample options */),添加红色框框中的代码: ![4.png](/uploads/201808/01/103642f7qmj8vvv3bjdvd3.png) 以上步骤,就是把homework.c添加到该项目。把这步做完之后就可以写我们的程序了。 具体写程序的方法就不再陈诉,具体可以参考我的附件。 我们来看看作业的要求步骤: ![5.png](/uploads/201808/01/103813y0loil0buokpp9pi.png) 接下来,我们开始我们的步骤: 第一步:连接上我们的远方的服务器: ![2.png](/uploads/201808/01/100755wqw131pk2boi6865.png) 第二步:使用login命令登陆服务器: ![3.png](/uploads/201808/01/100755vjpzhj8lpuq9a4fp.png) 与此同时,我们可以看到其他同学也在做作业: ![4.png](/uploads/201808/01/100755hyynotunrvgqgvqu.png) 第三步:使用say命令: ![5.png](/uploads/201808/01/100755g8538w5h7wjyzt5w.png) 我们可以在python程序看到,一个用户名为Jack_Lin正在发送信息,确认我们发送正确: ![6.png](/uploads/201808/01/100755r7myvwpdyxrfjy4w.png) 第四步:使用look命令: ![7.png](/uploads/201808/01/100755kbiquhdmfu4db700.png) 第五步:使用who命令: ![8.png](/uploads/201808/01/100755o5yscysuzdu8zrzc.png) 第六步:使用say命令说看见有哪些人在聊天室: ![9.png](/uploads/201808/01/100755ru10eunsqeycgcyy.png) 第七步:使用say命令说自己准备logout: ![11.png](/uploads/201808/01/100756hmmx22200vxkmxdc.png) 第八步:使用logout命令退出: ![12.png](/uploads/201808/01/100756ol6885uv8xsrr56c.png) 与此同时,在我的python程序中可以看到: ![13.png](/uploads/201808/01/100756o4m54vtd4tbdtmbg.png) 到这里,就完成了整体任务了,谢谢大家。源码在附件。 ![1.png](https://oss-club.rt-thread.org/uploads/201808/01/100755zt0beboq89kkk01t.png) ![10.png](https://oss-club.rt-thread.org/uploads/201808/01/100756qh5shivwohhpzhnz.png) 下载附件 [TCPclient.py](https://oss-club.rt-thread.org/uploads/201808/01/104031zw2i33xzzk93buam.attach) 下载附件 [homework.c](https://oss-club.rt-thread.org/uploads/201808/01/104031f9dzp3iz32pvacqz.attach)
查看更多
1
个回答
默认排序
按发布时间排序
yqiu
2018-08-01
这家伙很懒,什么也没写!
:victory:
撰写答案
登录
注册新账号
关注者
0
被浏览
1.5k
关于作者
Jack_Lin
这家伙很懒,什么也没写!
提问
3
回答
2
被采纳
0
关注TA
发私信
相关问题
1
【LWIP学习营】第一关开发环境搭建
2
LWIP学习营第一周入门移植问题汇总贴
3
【LWIP学习营】f407+lan8720A小结
4
【LwIP学习营】【第一周】仅零散记录,无主题
5
【LWIP学习营】正点原子探索者F407+LAN8720第一周小结
6
【LwIP学习营】【第一周】网络通信基础及实现TCP 聊天客户端
7
【LwIP学习营】【第一周】LWIP移植
8
【LwIP学习营】【第一周】LWIP移植
9
【LwIP学习营】【第一周】开发板适配
10
【LwIP学习营】【第一周】环境搭建和配置验证
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用RC522软件包驱动FM1722
2
常量数据类型和表达式陷阱分享
3
进行i2c驱动移植的经验总结
4
在VSCode中使用clang-format
5
我该如何使用这个微雪的WIFI400 WIFI-LPB-100在rtt里或者我该怎样为它开发驱动
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
289
次被采纳
张世争
809
个答案
175
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部