网络编程:以一个聊天程序结束这个学习。

本文详细记录了使用已学的网络编程知识,基于终端实现一个简单的聊天程序的过程,包括解决服务器并发处理、多线程读写同步以及C语言字符串处理等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


             原本这两天学习ARM裸机程序了,但是学习Linux应用程序开发老师说应该有一个结果。就是做一个东西出来,就是用学过的东西,就用最后一节学习的网络编程做一个基于终端的聊天程序来结束。

             主要记录一下遇到的问题和解决的方法:

             先说下我以实验手册上的最好一个例子为基础:Sever是靠多线程来实现并发服务器。Client是一个while循环。可以有多个Client,服务器都可以接收并反发给Client。
              第一个就是构思了,第一想到的就是QQ了,想一下它的样子来。至少是QQ->QQ而不是QQ->服务器。想到这就要尝试解决服务器将一个Q的东西发给另一个Q。
            就要让Sever能将A_Client中的内容发给B_Client,这样才能实现QQ->QQ。多次尝试未果,回头尝试一下在Sever反发时多加一条信息,结果发现这样都不行,Client就收不到了。

            这就引出另外一个东西,read读时不能及时的读,很容易丢东西。就想用select,因为没有学过这个,找这个熟悉这个半天,实在没有办法就去问老师,老师说的推断错了,对于Client是不需要用select用while就OK。但是你读写一个进程中是不行的,肯定会要等输入,要等输入就会阻塞,就不能读东西了。
可以考虑用多线程,一个read,一个write。然后就这样改了,然后这个问题就解决了。

             回到刚才的问题是Sever把从一个Client收到的数据传给另一个就需要在线程中进行判断如果是connectID是1 就向2发送收到的内容,如果是2就向1收到的内容。

            最后一个问题是第一次如果发一个hello,正常!但是如果第二次发的少了是一个“h”那么就会出现多打一个 ello。这使我很纠结,问题老师才知道这是Client在从终端中读取数据时,数组的最后不是/0,但是却把它当做字符串来算长度就会有问题,这属于C语言中的问题了,就在每次从终端read后在放到的数组中末位添加一个'\0'这位就解决了这个问题。

            然后就没这样算是可以了吧。这算是一个很低级的程序吧,在网上找到Sever多线程,用select,但是这位目前 没有学 等学了再添加吧!

开发板做服务器:



Client——A   Jack:


Client B Tom:


源代码:这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值