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


             原本这两天学习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,但是这位目前 没有学 等学了再添加吧!

开发板做服务器:

网络编程:以一个聊天程序结束这个学习。_第1张图片


Client——A   Jack:

网络编程:以一个聊天程序结束这个学习。_第2张图片

Client B Tom:

网络编程:以一个聊天程序结束这个学习。_第3张图片

源代码:这里

你可能感兴趣的:(网络编程:以一个聊天程序结束这个学习。)