﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天狼啸月-文章分类-socket类</title><link>http://www.cppblog.com/wuqingchenxinda/category/18403.html</link><description>天狼神族</description><language>zh-cn</language><lastBuildDate>Fri, 23 Dec 2011 02:51:34 GMT</lastBuildDate><pubDate>Fri, 23 Dec 2011 02:51:34 GMT</pubDate><ttl>60</ttl><item><title>socket传输文件</title><link>http://www.cppblog.com/wuqingchenxinda/articles/162636.html</link><dc:creator>烈焰之光</dc:creator><author>烈焰之光</author><pubDate>Fri, 23 Dec 2011 00:38:00 GMT</pubDate><guid>http://www.cppblog.com/wuqingchenxinda/articles/162636.html</guid><wfw:comment>http://www.cppblog.com/wuqingchenxinda/comments/162636.html</wfw:comment><comments>http://www.cppblog.com/wuqingchenxinda/articles/162636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wuqingchenxinda/comments/commentRss/162636.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wuqingchenxinda/services/trackbacks/162636.html</trackback:ping><description><![CDATA[<div id="article_content" class="article_content">
<p>在两台计算机传输文件之前，必需得先有一台计算机建立套节子连接并绑定一个固定得端口，并在这个端口侦听另外一台计算机的连接请求。</p>
<p>socket&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; Socket(AddressFamily.InterNetwork,SocketType.Stream,&nbsp;&nbsp; ProtocolType.Tcp); <br />socket.Blocking&nbsp;&nbsp; =&nbsp;&nbsp; true&nbsp;&nbsp; ; <br />IPEndPoint&nbsp;&nbsp; computernode1&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; IPEndPoint(serverIpadress,&nbsp;&nbsp; 8080);</p>
<p>socket.Bind(computernode1);</p>
<p>socket.Listen(-1);</p>
<p>当有其他的计算机发出连接请求的时候，被请求的计算机将对每一个连接请求分配一个线程，用于处理文件传输和其他服务。</p>
<p>while&nbsp;&nbsp; (&nbsp;&nbsp; true&nbsp;&nbsp; )&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clientsock&nbsp;&nbsp; =&nbsp;&nbsp; socket.Accept();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp; (&nbsp;&nbsp; clientsock.Connected&nbsp;&nbsp; )&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread&nbsp;&nbsp; tc&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; Thread(new&nbsp;&nbsp; ThreadStart(listenclient));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tc.Start();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>下面的代码展示了listenclient方法是如何处理另外一台计算机发送过来的请求。首先并对发送过来的请求字符串作出判断，看看是何种请求，然后决定相应的处理方法。</p>
<p>void&nbsp;&nbsp; listenclient() <br />{ <br />&nbsp;&nbsp;&nbsp; Socket&nbsp;&nbsp; sock&nbsp;&nbsp; =&nbsp;&nbsp; clientsock&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp; try <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while&nbsp;&nbsp; (&nbsp;&nbsp; sock&nbsp;&nbsp; !=&nbsp;&nbsp; null&nbsp;&nbsp; )&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[]&nbsp;&nbsp; recs&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; byte[32767]; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp; rcount&nbsp;&nbsp; =&nbsp;&nbsp; sock.Receive(recs,recs.Length,0)&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp; message&nbsp;&nbsp; =&nbsp;&nbsp; System.Text.Encoding.ASCII.GetString(recs)&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对message作出处理，解析处请求字符和参数存储在cmdList&nbsp;&nbsp; 中 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; execmd＝cmdList[0]; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sender&nbsp;&nbsp; =&nbsp;&nbsp; null&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sender&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; Byte[32767]; <br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp; parm1&nbsp;&nbsp; =&nbsp;&nbsp; " "; <br />//目录列举&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />if&nbsp;&nbsp; (&nbsp;&nbsp; execmd&nbsp;&nbsp; ==&nbsp;&nbsp; "LISTING "&nbsp;&nbsp; )&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListFiles(message); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />//文件传输 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;&nbsp; (&nbsp;&nbsp; execmd&nbsp;&nbsp; ==&nbsp;&nbsp; "GETOK "&nbsp;&nbsp; ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd&nbsp;&nbsp; =&nbsp;&nbsp; "BEGINSEND&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp; filepath&nbsp;&nbsp; +&nbsp;&nbsp; "&nbsp;&nbsp; "&nbsp;&nbsp; +&nbsp;&nbsp; filesize&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sender&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; Byte[1024]; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sender&nbsp;&nbsp; =&nbsp;&nbsp; Encoding.ASCII.GetBytes(cmd); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sock.Send(sender,&nbsp;&nbsp; sender.Length&nbsp;&nbsp; ,&nbsp;&nbsp; 0&nbsp;&nbsp; ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转到文件下载处理 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DownloadingFile(sock); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; catch(Exception&nbsp;&nbsp; Se) <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp; s&nbsp;&nbsp; =&nbsp;&nbsp; Se.Message; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(s); <br />&nbsp;&nbsp;&nbsp; } <br />} <br /><br />至此，基本的工作已经完成了，下面我们看看如何处理文件传输的。 <br />while(rdby&nbsp;&nbsp; &lt;&nbsp;&nbsp; total&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp; nfs.CanWrite) <br />&nbsp;&nbsp;&nbsp; { <br />//从要传输的文件读取指定长度的数据 <br />len&nbsp;&nbsp; =fin.Read(buffed,0,buffed.Length)&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将读取的数据发送到对应的计算机 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nfs.Write(buffed,&nbsp;&nbsp; 0,len); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //增加已经发送的长度 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rdby=rdby+len&nbsp;&nbsp; ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; } <br />从上面的代码可以看出是完成文件转换成FileStream&nbsp;&nbsp; 流，然后通过NetworkStream绑定对应的套节子，最后调用他的write方法发送到对应的计算机。 <br />我们再看看接受端是如何接受传输过来的流，并且转换成文件的： <br />NetworkStream&nbsp;&nbsp; nfs&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; NetworkStream(sock)&nbsp;&nbsp; ; <br />try <br />{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //一直循环直到指定的文件长度 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(rby&nbsp;&nbsp; &lt;&nbsp;&nbsp; size) <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[]&nbsp;&nbsp; buffer&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; byte[1024]&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读取发送过来的文件流 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp; i&nbsp;&nbsp; =&nbsp;&nbsp; nfs.Read(buffer,0,buffer.Length)&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fout.Write(buffer,0,(int)i)&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rby=rby+i&nbsp;&nbsp; ; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; fout.Close()&nbsp;&nbsp; ; <br /><br />从上面可以看出接受与发送恰好是互为相反的过程，非常简单。</p>
<p><br />//取得预保存的文件名&nbsp;&nbsp; <br />string&nbsp;&nbsp; fileName= "test.rar ";&nbsp;&nbsp; <br />//远程主机&nbsp;&nbsp; <br />string&nbsp;&nbsp; hostName=TextBoxHost.Text.Trim();&nbsp;&nbsp; <br />//端口&nbsp;&nbsp; <br />int&nbsp;&nbsp; port=80;&nbsp;&nbsp; <br />//得到主机信息&nbsp;&nbsp; <br />IPHostEntry&nbsp;&nbsp; ipInfo=Dns.GetHostByName(hostName);&nbsp;&nbsp; <br />//取得IPAddress[]&nbsp;&nbsp; <br />IPAddress[]&nbsp;&nbsp; ipAddr=ipInfo.AddressList;&nbsp;&nbsp; <br />//得到ip&nbsp;&nbsp; <br />IPAddress&nbsp;&nbsp; ip=ipAddr[0];&nbsp;&nbsp; <br />//组合出远程终结点&nbsp;&nbsp; <br />IPEndPoint&nbsp;&nbsp; hostEP=new&nbsp;&nbsp; IPEndPoint(ip,port);&nbsp;&nbsp; <br />//创建Socket&nbsp;&nbsp; 实例&nbsp;&nbsp; <br />Socket&nbsp;&nbsp; socket=new&nbsp;&nbsp; Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);&nbsp;&nbsp; <br />try&nbsp;&nbsp; <br />{&nbsp;&nbsp; <br />//尝试连接&nbsp;&nbsp; <br />socket.Connect(hostEP);&nbsp;&nbsp; <br />}&nbsp;&nbsp; <br />catch(Exception&nbsp;&nbsp; se)&nbsp;&nbsp; <br />{&nbsp;&nbsp; <br />LeixunCMS.Common.MessageBox.Show(this.Page, "连接错误 "+se.Message);</p>
<p>}</p>
<p>例子2：</p>
<p>这几天一直想写一个类似QQ文件发送的东西，上网找了一些资料，都不是很理想，下面我把我的思路和基本实现代码说下。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了把问题说清楚，把一些变量都直接附值了，并没有通过输入附值</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string path = "F://SmartMovie.EXE";&nbsp;&nbsp;&nbsp; <span style="color: #008080">//要发送的文件</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Socket s;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void listen()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string ip = "127.0.0.1";&nbsp;&nbsp; <span style="color: #008080">//远程IP 这里定义为自己的机器</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPAddress[] ih = Dns.GetHostAddresses(ip);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008080">//获得IP列表</span></span><span style="font-family: Courier New"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPAddress newip = ih[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080">//获取IP地址</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int port = 6789;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080"> //定义端口</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPEndPoint Conncet = new IPEndPoint(newip, port);&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008080">//构造结点</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);&nbsp;&nbsp;</span><span style="font-family: Courier New">&nbsp;&nbsp;</span><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080">//初始化socket </span></span></p>
<p><span style="font-family: Courier New"><span style="color: #008080"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.Connect(Conncet);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080">//连接远程服务器</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (s.Connected)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008080">//如果连接成功 s.Connected 则为true 否则为 false<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p><br /><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("连接成功");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread t = new Thread(new ThreadStart(set)); <span style="color: #008080">//创建进程</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.Start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008080">//开始进程</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("发送完毕")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(NullReferenceException e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("{0}",e);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void set()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080">//创建set函数<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("开始发送数据");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] b = new byte[10000000];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080"> //创建文件缓冲区，这里可以认为文件的最大值<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileStream file = File.Open(path, FileMode.Open,FileAccess.Read);&nbsp;&nbsp; <span style="color: #008080">//创建文件流<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int start = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int end = (int)file.Length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008080">//获取文件长度 文件传送如果有需要超过int的范围估计就要改写FileStream类了</span></span></p>
<p><span style="font-family: Courier New"><span style="color: #008080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000"> try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (end != 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int count = file.Read(b, start, end);&nbsp;&nbsp;&nbsp;<span style="color: #008080">&nbsp;&nbsp; //把数据写进流</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start += count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end -= count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (start != 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int n = s.Send(b, end, start, SocketFlags.None); <span style="color: #008080">//用Socket的Send方法发送流<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end += n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start -= n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><span style="font-family: Courier New"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.Close();&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080"> //关闭文件流</span></span><span style="font-family: Courier New"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.Close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080">//关闭Socket</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (NullReferenceException e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("{0}", e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;</span></p>
<p><span style="font-family: Courier New">这样文件发送的模型就实现了</span></p>
<p><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp; 接下去实现文件的接收，首先要确定对方发送文件的长度，其实上面的那段还要加入发送文件长度的功能，实现很简单，就是发送int变量end ，然后要求接收代码返回一个Boolean确定是否发送，这里为了更简明的说清楚原理并没有实现</span></p>
<p><span style="font-family: Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void get()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string path = "G://da.exe"; <span style="color: #008080">//接收的文件</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileStream file = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); <span style="color: #008080">//写入文件流<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TcpListener listen = new TcpListener(6789); <span style="color: #008080">//监听端口<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Socket s1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); <span style="color: #008080">//定义Socket并初始化<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen.Start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008080">//开始监听<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s1 = listen.AcceptSocket();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080"> //获取Socket连接<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] data = new byte[10000000];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008080">//定义缓冲区<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int longer = data.Length;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int start = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int mid = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (s1.Connected)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080"> //确定连接<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("连接成功");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int count = s1.Receive(data, start, longer, SocketFlags.None); <span style="color: #008080">//把接收到的byte存入缓冲区<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mid += count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; longer -= mid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (count != 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = s1.Receive(data, mid, longer, SocketFlags.None);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mid += count;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; longer -= mid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.Write(data, 0, 1214134); <span style="color: #008080">//写入文件，1214134为文件大小，可以用socket发送获得，代码前面已经说明。<br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s1.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(NullReferenceException e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("{0}",e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p></div> <img src ="http://www.cppblog.com/wuqingchenxinda/aggbug/162636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wuqingchenxinda/" target="_blank">烈焰之光</a> 2011-12-23 08:38 <a href="http://www.cppblog.com/wuqingchenxinda/articles/162636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>socket传输文件示例</title><link>http://www.cppblog.com/wuqingchenxinda/articles/162635.html</link><dc:creator>烈焰之光</dc:creator><author>烈焰之光</author><pubDate>Fri, 23 Dec 2011 00:37:00 GMT</pubDate><guid>http://www.cppblog.com/wuqingchenxinda/articles/162635.html</guid><wfw:comment>http://www.cppblog.com/wuqingchenxinda/comments/162635.html</wfw:comment><comments>http://www.cppblog.com/wuqingchenxinda/articles/162635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wuqingchenxinda/comments/commentRss/162635.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wuqingchenxinda/services/trackbacks/162635.html</trackback:ping><description><![CDATA[<p style="line-height: 150%; margin: 8px">//1：显示文件进度 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">//2：可以随时终止传输过程 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">//发送数据线程 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">UINT SendDataThread(LPVOID lpParam); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">//接收数据线程 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">UINT ReceiveDataThread(LPVOID lpParam); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">//发送数据按钮消息响应函数 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">void CTzg004Dlg::OnButtonSend() 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; // TODO: Add your control notification handler code here 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //初始化数据发送结束标志 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; m_bSendEnd=FALSE; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //初始化数据接收结束标志 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; m_bRecEnd=FALSE; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //更新对话框数据 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; UpdateData(TRUE); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //打开文件对话框 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "所有文件 (*.*)|*.*||"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; if(dlg.DoModal()==IDOK) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_strFileName=dlg.GetPathName(); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开始发送数据线程 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxBeginThread(SendDataThread,this,THREAD_PRIORITY_NORMAL); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">} 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">//接收数据按钮消息响应函数 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">void CTzg004Dlg::OnButtonReceive() 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; // TODO: Add your control notification handler code here 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //初始化数据发送结束标志 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; m_bSendEnd=FALSE; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //初始化数据接收结束标志 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; m_bRecEnd=FALSE; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; UpdateData(TRUE); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //开始接收数据线程 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; AfxBeginThread(ReceiveDataThread,this,THREAD_PRIORITY_NORMAL); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">} 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">//终止发送按钮消息响应 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">void CTzg004Dlg::OnButtonSendEnd() 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; // TODO: Add your control notification handler code here 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //设置发送数据结束标志 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; m_bSendEnd=TRUE; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">} 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">//终止接收按钮消息响应 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">void CTzg004Dlg::OnButtonRecEnd() 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; // TODO: Add your control notification handler code here 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //设置接收数据结束标志 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; m_bRecEnd=TRUE; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">} 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">UINT SendDataThread(LPVOID lpParam) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CTzg004Dlg *pDlg=(CTzg004Dlg *)lpParam; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CFile file; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; if( !file.Open(pDlg-&gt;m_strFileName, CFile::modeRead) ) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("打开文件出错！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CSocket sockTemp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CString str,str1; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockTemp.Create(pDlg-&gt;m_iDataPort1); //得到端口号 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockTemp.Listen(1);//只接受一个连接 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CSocket&nbsp;sockSend; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //设置发送按钮禁止 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_BUTTON_SEND)-&gt;EnableWindow(FALSE); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockTemp.Accept(sockSend);//注意，sockTemp已交了自己的指针地址到sockSend，故不用Close 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //打开发送终止按钮 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_BUTTON_SEND_END)-&gt;EnableWindow(TRUE); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;iBufSize = 1024 * 5;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;iSize = iBufSize; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; LPBYTE&nbsp;pBuf = new BYTE[iBufSize];&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; DWORD dwTemp = 0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; BOOL bTest = sockSend.AsyncSelect(0);//由于CSocket实际是异步，将它变为同步（阻塞）方式。 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockSend.IOCtl( FIONBIO, &amp;dwTemp);//用IOCtl要将AsyncSelect的第一个参数为0，参看MSDN 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; UINT uiLength = file.GetLength(); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockSend.Send(&amp;uiLength, 4);//传送文件大小到接收方（Client端） 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; int iNumByte; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; UINT uiTotal = 0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; while(uiTotal &lt; uiLength) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iEnd=pDlg-&gt;m_bSendEnd; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //传送发送端状态（是否结束） 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iNumByte = sockSend.Send(&amp;iEnd, sizeof(int)); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //发送错误 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(iNumByte == SOCKET_ERROR) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("发送错误！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto ExitLable1; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(iEnd==1)//发送端终止 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("发送端终止"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto ExitLable1; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读取文件内容 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((int)(uiLength - uiTotal) &lt; iBufSize) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iSize = uiLength - uiTotal;//当小于缓冲区iTEST时的处理 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iSize=file.Read(pBuf , iSize);//得到读取的字节数 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iCount=0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //发送定长文件数据 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(iCount&lt;iSize) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iNumByte = sockSend.Send(pBuf, iSize-iCount);//注意iNumByte为实际的发送字节数，不要以iSize为准 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(iNumByte == SOCKET_ERROR) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox("发送错误！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto ExitLable1; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iCount+=iNumByte; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(iCount&lt;iSize) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.Seek(iSize-iCount,CFile::current); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uiTotal += iCount; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置发送数据进度条 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDlg-&gt;m_CtrlProgressSend.SetPos(int(((double)uiTotal/uiLength)*100)); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.Format("发送进度：%d%%",int(((double)uiTotal/uiLength)*100)); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //表明发送数据百分比 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDlg-&gt;GetDlgItem(IDC_STATIC_SEND)-&gt;GetWindowText(str1); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str1!=str) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDlg-&gt;GetDlgItem(IDC_STATIC_SEND)-&gt;SetWindowText(str); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //发送文件成功 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox("发送文件成功！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">ExitLable1: 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; delete[] pBuf; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; file.Close(); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockSend.Close(); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;m_CtrlProgressSend.SetPos(0);//恢复进度 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_BUTTON_SEND_END)-&gt;EnableWindow(FALSE);//设置发送结束按钮禁止 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_BUTTON_SEND)-&gt;EnableWindow(TRUE);//设置发送按钮正常 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_STATIC_SEND)-&gt;SetWindowText("发送进度："); //恢复提示进度 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; return 0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">} 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">UINT ReceiveDataThread(LPVOID lpParam) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CTzg004Dlg *pDlg=(CTzg004Dlg *)lpParam; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //保存文件对话框 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "所有文件 (*.*)|*.*||"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; while(dlg.DoModal()!=IDOK) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("选择文件出错，请重新选择！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CString str,str1,str2; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CSocket&nbsp;sockRecv; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockRecv.Create(); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;m_CtrlIPSend.GetWindowText(str);//得到发送端IP地址 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_BUTTON_RECEIVE)-&gt;EnableWindow(FALSE);//禁止接收按钮 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; while(sockRecv.Connect(str,pDlg-&gt;m_iDataPort2)==0)//连接发送方地址，若上网，可改为实际IP地址，端口要跟Server端相同。 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(50); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_BUTTON_REC_END)-&gt;EnableWindow(TRUE);//打开终止接收按钮 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; str2=dlg.GetPathName();//得到文件名 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; CFile file; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; file.Open(str2, CFile::modeCreate | CFile::modeWrite); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; BOOL bFileFail=FALSE; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; DWORD dwTemp =&nbsp;0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockRecv.AsyncSelect(0); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockRecv.IOCtl( FIONBIO, &amp;dwTemp);//变为阻塞方式 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; UINT uiLength; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockRecv.Receive(&amp;uiLength, 4);//接收发方（Server端）的文件大小 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;iBufSize = 1024&nbsp;* 5; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;iSize = iBufSize; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; LPBYTE&nbsp;pBuf = new BYTE[iBufSize]; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;iNumByte; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; UINT uiTotal = 0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; while(uiTotal &lt; uiLength) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iEnd=0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //接收端终止 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(pDlg-&gt;m_bRecEnd) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("接收端终止！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto ExitLable2; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //接收发送端状态数据 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iNumByte=sockRecv.Receive(&amp;iEnd, sizeof(int)); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(iNumByte == SOCKET_ERROR) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("接收信号错误！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto ExitLable2; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //发送端终止 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(iEnd==1) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox("发送端终止！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto ExitLable2; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((int)(uiLength - uiTotal) &lt; iBufSize) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iSize = uiLength - uiTotal; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iCount=0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读取定长数据 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(iCount&lt;iSize) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iNumByte = sockRecv.Receive(pBuf, iSize-iCount); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(iNumByte == SOCKET_ERROR) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox("接收错误！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto ExitLable2; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iCount+=iNumByte; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.Write(pBuf, iNumByte); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uiTotal += iCount;//以实际接收字节为准 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置接收进度 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDlg-&gt;m_CtrlProgressRec.SetPos(int(((double)uiTotal/uiLength)*100)); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.Format("接收进度：%d%%",int(((double)uiTotal/uiLength)*100)); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //显示接收进度百分比 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDlg-&gt;GetDlgItem(IDC_STATIC_REC)-&gt;GetWindowText(str1); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(str1!=str) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDlg-&gt;GetDlgItem(IDC_STATIC_REC)-&gt;SetWindowText(str); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //接收文件成功 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox("接收文件成功！"); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; bFileFail=TRUE; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">ExitLable2: 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; delete[] pBuf; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; file.Close(); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //文件接收失败，则删除接收文件 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; if(!bFileFail) 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; { 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CFile::Remove( str2 ); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; } 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; sockRecv.Close(); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;m_CtrlProgressRec.SetPos(0);//恢复接收进度 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //禁止终止接收按钮 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_BUTTON_REC_END)-&gt;EnableWindow(FALSE); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //打开接收按钮 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_BUTTON_RECEIVE)-&gt;EnableWindow(TRUE); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; //恢复提示进度 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; pDlg-&gt;GetDlgItem(IDC_STATIC_REC)-&gt;SetWindowText("接收进度："); 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">&nbsp;&nbsp;&nbsp;&nbsp; return 0; 
<p style="line-height: 150%; text-indent: 26px; margin: 5px">
<p style="line-height: 150%; text-indent: 26px; margin: 5px">} </p> <img src ="http://www.cppblog.com/wuqingchenxinda/aggbug/162635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wuqingchenxinda/" target="_blank">烈焰之光</a> 2011-12-23 08:37 <a href="http://www.cppblog.com/wuqingchenxinda/articles/162635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>socket类</title><link>http://www.cppblog.com/wuqingchenxinda/articles/162634.html</link><dc:creator>烈焰之光</dc:creator><author>烈焰之光</author><pubDate>Fri, 23 Dec 2011 00:34:00 GMT</pubDate><guid>http://www.cppblog.com/wuqingchenxinda/articles/162634.html</guid><wfw:comment>http://www.cppblog.com/wuqingchenxinda/comments/162634.html</wfw:comment><comments>http://www.cppblog.com/wuqingchenxinda/articles/162634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wuqingchenxinda/comments/commentRss/162634.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wuqingchenxinda/services/trackbacks/162634.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Socket 类.NET Framework 4 其他版本  .NET Framework 3.5.NET Framework 3.0.NET Framework 2.0Silverlight &nbsp;实现 Berkeley 套接字接口。继承层次结构 System::Object &nbsp;&nb...&nbsp;&nbsp;<a href='http://www.cppblog.com/wuqingchenxinda/articles/162634.html'>阅读全文</a><img src ="http://www.cppblog.com/wuqingchenxinda/aggbug/162634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wuqingchenxinda/" target="_blank">烈焰之光</a> 2011-12-23 08:34 <a href="http://www.cppblog.com/wuqingchenxinda/articles/162634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>