Socket应用程序设计.doc_第1页
Socket应用程序设计.doc_第2页
Socket应用程序设计.doc_第3页
Socket应用程序设计.doc_第4页
Socket应用程序设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华南农业大学理学院课程实验(设计)报告专业年级:11信息与计算科学3班学生学号: 201130760305 学生姓名: 陈泽斌 实验题目: Socket应用程序设计 指导老师: 蔡贤资 实验时间: 2013/12/10 目录一、题目,时间,专业年级,实验人1二、实验内容与要求1三、实验过程2四、实验结果2五、总结与分析15六、参考文献16七、分工表及其他附录16一、题目,时间,专业年级,实验人 (1)题目:Socket应用程序设计 (2)时间:2013、12、10 (3)专业年级:11级信息与计算科学3班 (4)实验人:陈泽斌、林国梁、衣毅二、实验内容与要求(1)内容:基于Windows平台建立一个基于TCP/IP协议的网络通讯小程序。(2)要求: 能进行用户管理,所有用户必须登录到服务器,由服务器维护在线信息;IM功能:用户登录后进行实时多方点到点信息通信,如聊天;能选择要求服务器进行转发服务;能保存通信记录到数据库;能进行双方传输,能显示进度;*支持断点重传,检查时需要有功能随时中断传送,并在下次启动时能显示重传状态;*数据包加密;*实时语音双方传送功能;*多方通话功能;界面设计要求布局合理,信息清晰。三、实验过程(1)讨论并选择C#语言编写,对实验的功能进行分工,具体的细节如附表分工。 (2)各自对程序的功能进行编程,具体实现看实验结果分析。 (3)功能合并,调试修改。四、实验结果(1)服务器:关键代码:listenclient lc = new listenclient(listener);ThreadStart serverThreadstart = new ThreadStart(lc.serverthreadpro);Thread serverthread = new Thread(serverThreadstart);serverthread.IsBackground = true;serverthread.Start();解析:新建一个线程处理客户端链接请求,达到多用户进行连接,链接上后对服务端的数据进行在线信息与IP的更新。Timer time = new System.Timers.Timer();time.Interval = 1000;time.Elapsed += new System.Timers.ElapsedEventHandler(time_Elapsed);time.AutoReset = true;time.Enabled = true;time.Start();解析:建一个时钟,每隔一定时间就对客户端进行检测,同时更新客户端的好友数据在线和IP信息。TcpListener listener2 = new TcpListener(IPAddress.Parse(address), 1253);listener2.Start();解析:新建一个监听客户端发过来的代理离线信息,同时登录的时候也会检测服务器数据库是否有离线信息,有的话就会转发给客户端;(2)登录界面:注册界面:关键代码:tcpclient.Connect(IPAddress.Parse(serverip.getServer(), port);networkstream = tcpclient.GetStream();string cmm = CONNECT| + textBox1.Text + | + textBox2.Text + |; Byte bytes = System.Text.Encoding.Unicode.GetBytes(cmm.ToCharArray();networkstream.Write(bytes, 0, bytes.Length);len = networkstream.Read(buff, 0, buff.Length);msg = System.Text.Encoding.Unicode.GetString(buff, 0, len);string acceptFromServer = msg.Split(new Char | );解析:将登录的账号和密码发送给服务器,同时对服务器发回来的信息进行解读。(3)功能界面:关键代码:Timer time = new System.Timers.Timer();time.Interval = 2000;time.Elapsed += new System.Timers.ElapsedEventHandler(wt);time.AutoReset = true;time.Enabled = true;time.Start(); TcpListener listener = new TcpListener(IPAddress.Parse(clientipid.getClientip(), 1235);listener.Start();listen lt = new listen(listener);Thread td = new Thread(lt.star);td.IsBackground = true; td.Start(); serverSocket.set(createSocketServer(clientipid.getClientip(), 0,20);Thread WJJT= new Thread(ListenClientConnect);WJJT.IsBackground = true;WJJT.Start();解析:建立一个时钟,一定时间对好友列表进行更新;建一个线程对好友发过来的信息进行监听;建一个线程对好友发过来文本进行监听;建一个线程对服务器发过来离线信息进行监听。(4)功能界面:功能介绍:文件传输,查看聊天记录,发送信息,离线的话自动转发,同时传输的数据是加密的。(5)功能介绍界面;接受到信息的界面;点击后显示的内容:跟自己对话:添加和删除好友:删除好友:传输文件:关键代码:数据加密:byte rgbKey = Encoding.UTF8.GetBytes(TheSpKey.Substring(0, 8);byte rgbIV = Keys;byte inputByteArray = Encoding.UTF8.GetBytes(str);DESCryptoServiceProvider myDES = new DESCryptoServiceProvider();System.IO.MemoryStream MStream = new MemoryStream();CryptoStream CStream = new CryptoStream(MStream, myDES.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);CStream.Write(inputByteArray, 0, inputByteArray.Length);CStream.FlushFinalBlock();return Convert.ToBase64String(MStream.ToArray();数据解密:byte rgbKey = Encoding.UTF8.GetBytes(TheSpKey);byte rgbIV = Keys;byte inputByteArray = Convert.FromBase64String(str);DESCryptoServiceProvider myDES = new DESCryptoServiceProvider();MemoryStream MStream = new MemoryStream();CryptoStream CStream = new CryptoStream(MStream, myDES.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);CStream.Write(inputByteArray, 0, inputByteArray.Length);CStream.FlushFinalBlock();return Encoding.UTF8.GetString(MStream.ToArray();文件传输和断点重连:sock = createSocketConnection(ip, 1);byte buffer = new byte1024;reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None);long send, length = reader.Length;setBar(length);sock.Send(BitConverter.GetBytes(length);string fileName = Path.GetFileName(path);sock.Send(buffer, 0, Encoding.Default.GetBytes(fileName, 0, fileName.Length, buffer, 0), SocketFlags.None);Console.WriteLine(Sending file: + fileName + .Plz wait.);sock.Receive(buffer); reader.Position = send = BitConverter.ToInt64(buffer, 0);refreshBar(send);int read, sent;bool flag;while (read = reader.Read(buffer, 0, 1024) != 0)sent = 0; lag = true; while (sent += sock.Send(buffer, sent, read, SocketFlags.None) read) lag = false; send += (long)sent; efreshBar(send); if (flag) send += (long)sent; refreshBar(send); 接收文件代码:byte buffer = new byte1024;client.Receive(buffer);long receive, length = BitConverter.ToInt64(buffer, 0);setBar(length);string fileName = Encoding.Default.GetString(buffer, 0, client.Receive(buffer);FileInfo file = new FileInfo(Path.Combine(path, fileName);writer = file.Open(file.Exists ? FileMode.Append : FileMode.CreateNew, FileAccess.Write, FileShare.None);receive = writer.Length;client.Send(BitConverter.GetBytes(receive);int received;while (receive length) received = client.Receive(buffer); if (received = 0) return; writer.Write(buffer, 0, received); writer.Flush(); receive += (long)received; refreshBar(receive); 链接数据库:string commstr;SqlConnection conn;SqlCommand comm,;commstr = select * from 好友 where Id=N + clientipid.getClientid() + ;conn = new SqlConnection();conn.ConnectionString = Data Source=(localdb)Projects;AttachDBFilename= + AppDomain.CurrentDomain.BaseDirectory + kehuduan.mdf;Integrated Security=True;conn.Open();五、总结与分析第一次做像这次一样大的课程设计,一开始看到题目要求的时候还以为很简单,后来在实现的过程中才发现自己有很多没有搞懂的东西,每个地方都要细细琢磨才能最后完成。当然这也要多亏了现在网络技术的发达以及学校图书馆的全面资料。经过组员的讨论,我们最终决定用C#来完成这次的课程设计,虽然以前从来没有试过这个语言,但是后来我们发现C#有很多很好用的地方,而且它的用法与我们之前学习的C语言以及java都有相似的地方,所以运用起来并没有想象中那么的麻烦。一开始我们的分工还是比较简单的,就是每个人分别实现要求中的两到三个功能,然后最后在把各自的代码植入在一起。我负责的是把通信记录到数据库以及数据包加密,这两个都是相对来说比较简单的功能,基本上很容易实现。后来我尝试着把语音通话也一并写出来,但是在实现过程中发现了很多的问题。经过网上查找语音的实现方法,最后是决定用DirectSound类来实现。看过网上的教程觉得如果用这个类实现的话应该不会很难,但是后来在实现过程中发现了各种问题,一开始就是要下载各种组件以便实现所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论