- 论坛徽章:
- 0
|
这是自己写的一个简单的 LINUX 下使用的可以聊天和传输文件的程序。
程序运行时的界面是字符的,有控制命令字可以完成文件传输的功能。
程序的简单功能说明如下:
程序中定义了一些控制标识符,即用来区分一般的聊天字符串和特殊的控制字符串。
程序主要用到的技术是 多线程和共享缓冲区。
线程主要有三个,即 操纵Socket缓冲区的收发线程,标准输入输出控制线程,文件传输控制线程。
简单的功能描述: 1. Socket缓冲区控制线程负责网络数据的接收和发送,即它只是将收到的数据简单判断并复制到标准输入输出线程缓冲区
或文件传输控制缓冲区,它可以同时占有两个缓冲区。2. 标准输入输出控制线程负责处理用户的键盘输入和网络传送过来的控制命令。它区分
用户输入的字符串的类型,若是控制字符串则将控制动作通知 Socket缓冲区控制线程,若为一般字符串则简单地复制到 Socket缓冲区中进行
发送。 3. 文件传输控制线程只是在进行文件传输时建立,文件传输结束后撤销。它也拥有一个缓冲区,根据缓冲区第一个字符来区分控制字符串
和一般字符串。若为控制字符串则做相应的处理,若为一半字符串则简单地写入接收文件。
标准输入输出控制线程和文件传输控制线程在任何时刻只能拥有一个缓冲区,即它们在拥有 Socket缓冲区时必须放弃自己的缓冲区,这是为
了防止死锁。
程序存在的问题: 由于种种原因吧,程序运行时会产生一些奇怪的问题,不过总体功能都已经实现。
1. 程序运行时发送方可能在发送一个数据后接收方可能没有反应,在下一个数据发送完毕后上一个数据才被接收方收到,或者两个都被收到。
2. 标准I/O 会被中断从而造成提示字符串被网络传送过来的数据隔断的情况。
3. 程序在传输文件时可能会在传输 nK 之后认为传输结束而停止,但此时文件可能有 m兆字节。
4. 程序正常推出比较困难。
P.S. 自己以前没有写过网络相关的程序,对网络数据传输不太了解,并且是在学习多线程编程时为了检验学习的结果而写的程序。显得比较粗糙。
欢迎共同学习探讨。 |
|