我希望你是我独家记忆

一段永远封存的记忆,随风而去
posts - 263, comments - 31, trackbacks - 0, articles - 3
   :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

TCP客户端

Posted on 2009-07-16 13:14 Hero 阅读(472) 评论(0)  编辑 收藏 引用 所属分类: C#积累
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.IO;
 5
 6namespace Server
 7{
 8    class PictureHelper
 9    {
10        public static string[] GetFileList()
11        {
12            //注意得到的是完整的路径名称
13            string[] files = Directory.GetFiles( Properties.Settings.Default.PictureDirectory );
14
15            //remove the directory path from the filename
16            for ( int i = 0; i < files.Length; i++ )
17            {
18                files[i] = Path.GetFileName( files[i] );
19            }

20
21            return files;
22        }

23
24        //返回图片文件的字节数组
25        public static byte[] GetPictureBytes( string filename )
26        {
27            //通过FileInfo来获得文件的长度
28            FileInfo fileInfo = new FileInfo( filename );
29            byte[] buffer = new byte[fileInfo.Length];
30            using ( FileStream fileStream = fileInfo.OpenRead() )
31            {
32                fileStream.Read( buffer, 0, buffer.Length );
33            }

34
35            return buffer;
36        }

37
38        //在字节数组中返回文件列表
39        public static byte[] GetFileListBytes()
40        {
41            string[] files = PictureHelper.GetFileList();
42
43            StringBuilder responseMessage = new StringBuilder();
44
45            foreach ( string str in files )
46            {
47                responseMessage.Append( str );
48                responseMessage.Append( ":" );
49            }

50
51            byte[] responseBuffer = Encoding.ASCII.GetBytes( responseMessage.ToString() );
52
53            return responseBuffer;
54        }

55    }

56}

57

 1using System;
 2using System.Collections.Generic;
 3using System.Windows.Forms;
 4using System.Net;
 5using System.Net.Sockets;
 6using System.IO;
 7
 8namespace Server
 9{
10    static class Program
11    {
12        /// <summary>
13        /// 应用程序的主入口点。
14        /// </summary>

15        [STAThread]
16        static void Main()
17        {
18            //Application.EnableVisualStyles();
19            //Application.SetCompatibleTextRenderingDefault( false );
20            //Application.Run( new Form1() );
21
22            //新建一个监听器
23            TcpListener listener = new TcpListener(IPAddress.Any, Properties.Settings.Default.Port);
24
25            listener.Start();//开始监听
26
27            while ( true )
28            {
29                const int bufferSize = 256;
30
31                //创建一个客户端
32                TcpClient client = listener.AcceptTcpClient();
33                //从客户端获得网络流
34                NetworkStream stream = client.GetStream();
35
36                //从客户端网络流中读取查询数据
37                byte[] buffer = new byte[bufferSize];
38                //记录实际获得的字节数
39                int readBytes = 0;
40                readBytes = stream.Read( buffer, 0, bufferSize );
41                //获得查询字符串
42                string request = (System.Text.Encoding.ASCII.GetString( buffer )).Substring( 0, readBytes );
43
44                if ( request.StartsWith( "LIST" ) )
45                {//如果请求的是列表
46
47                    byte[] responseBuffer = PictureHelper.GetFileListBytes();
48
49                    stream.Write( responseBuffer, 0, responseBuffer.Length );
50                }

51                else if ( request.StartsWith( "FILE" ) )
52                {//如果请求的是文件
53
54                    //获得要下载的文件名字
55                    string[] requestMessage = request.Split( ':' ) ;
56                    string filename = requestMessage[1];
57
58                    //string curpath = (( Properties.Settings.Default.PictureDirectory ).ToString() + @"\" + filename );
59                    //curpath = @"D:\Picture\" + filename ;
60                    //byte[] data = File.ReadAllBytes( curpath );
61
62                    string curpath = Path.Combine( Properties.Settings.Default.PictureDirectory, filename );
63                    MessageBox.Show( curpath.ToString() );
64                    //从绝对路径中获取文件的全部字节流
65                    byte[] data = File.ReadAllBytes( curpath );
66                    
67                    //将图片发送给客户端
68                    stream.Write( data, 0, data.Length );
69                }

70
71                //不要忘记关闭流
72                stream.Close();
73                client.Close();
74            }

75        }

76    }

77}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理