c# winform socket网络编程点对点传输文件socket文件传输监听端口.docx
- 文档编号:12681796
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:62
- 大小:33.31KB
c# winform socket网络编程点对点传输文件socket文件传输监听端口.docx
《c# winform socket网络编程点对点传输文件socket文件传输监听端口.docx》由会员分享,可在线阅读,更多相关《c# winform socket网络编程点对点传输文件socket文件传输监听端口.docx(62页珍藏版)》请在冰豆网上搜索。
c#winformsocket网络编程点对点传输文件socket文件传输监听端口
c#winformsocket网络编程,点对点传输文件,socket文件传输,监听端口
关键字:
socket网络编程点对点传输文件文件传输监听端口
服务器用来接收文件,不停的监听端口,有发送文件就马上开始接收文件
服务端代码:
C#代码
1.using System;
2.using System.Collections.Generic;
3.using System.ComponentModel;
4.using System.Data;
5.using System.Drawing;
6.using System.Text;
7.using System.Windows.Forms;
8.
9.
10.using System.Net;
11.using System.Threading;
12.using System.Net.Sockets;
13.
14.using System.IO;
15.
16.namespace TestSocketServerHSTF
17.{
18. public partial class Form1 :
Form
19. {
20. public Form1()
21. {
22. InitializeComponent();
23.
24.
25. //不显示出dataGridView1的最后一行空白
26. dataGridView1.AllowUserToAddRows = false;
27. }
28.
29.
30. #region 定义变量
31.
32.
33. #endregion
34.
35.
36.
37. #region 进入窗体即启动服务
38.
39. private void Form1_Load(object sender, EventArgs e)
40. {
41. //开启接收线程
42. Thread TempThread = new Thread(new ThreadStart(this.StartReceive));
43. TempThread.Start();
44. }
45.
46.
47. #endregion
48.
49.
50.
51. #region 功能函数
52.
53. private void StartReceive()
54. {
55. //创建一个网络端点
56. IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("2005"));
57.
58. //MessageBox.Show(IPAddress.Any);
59.
60. //创建一个套接字
61. Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
62.
63. //绑定套接字到端口
64. server.Bind(ipep);
65.
66. //开始侦听(并堵塞该线程)
67. server.Listen(10);
68.
69. //确认连接
70. Socket client = server.Accept();
71.
72. //获得客户端节点对象
73. IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
74.
75.
76.
77. //获得[文件名]
78. string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
79. //MessageBox.Show("文件名" + SendFileName);
80.
81. //获得[包的大小]
82. string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
83. //MessageBox.Show("包大小" + bagSize);
84.
85. //获得[包的总数量]
86. int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)));
87. //MessageBox.Show("包的总数量" + bagCount);
88.
89. //获得[最后一个包的大小]
90. string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
91. //MessageBox.Show("最后一个包的大小" + bagLast);
92.
93. //创建一个新文件
94. FileStream MyFileStream = new FileStream(SendFileName, FileMode.Create, FileAccess.Write);
95.
96. //已发送包的个数
97. int SendedCount = 0;
98.
99. while (true)
100. {
101. byte[] data = TransferFiles.ReceiveVarData(client);
102. if (data.Length == 0)
103. {
104. break;
105. }
106. else
107. {
108. SendedCount++;
109. //将接收到的数据包写入到文件流对象
110. MyFileStream.Write(data, 0, data.Length);
111. //显示已发送包的个数
112. //MessageBox.Show("已发送包个数"+SendedCount.ToString());
113. }
114. }
115.
116. //关闭文件流
117. MyFileStream.Close();
118. //关闭套接字
119. client.Close();
120.
121. //填加到dgv里
122. //文件大小,IP,已发送包的个数,文件名,包的总量,最后一个包的大小
123. this.dataGridView1.Rows.Add(bagSize, clientep.Address, SendedCount, SendFileName, bagCount, bagLast);
124.
125. //MessageBox.Show("文件接收完毕!
");
126.
127. }
128.
129.
130. #endregion
131.
132.
133.
134. #region 拦截Windows消息,关闭窗体时执行
135. protected override void WndProc(ref Message m)
136. {
137. const int WM_SYSCOMMAND = 0x0112;
138. const int SC_CLOSE = 0xF060;
139. if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
140. {//捕捉关闭窗体消息
141. // User clicked close button
142. //this.WindowState = FormWindowState.Minimized;//把右上角红叉关闭按钮变最小化
143.
144. ServiceStop();
145. }
146. base.WndProc(ref m);
147. }
148. #endregion
149.
150.
151. #region 停止服务
152.
153. //停止服务
154. private void ServiceStop()
155. {
156. try
157. {
158.
159. }
160. catch { }
161.
162. try
163. {
164.
165. }
166. catch { }
167. }
168.
169. #endregion
170.
171. }
172.}
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Net;
usingSystem.Threading;
usingSystem.Net.Sockets;
usingSystem.IO;
namespaceTestSocketServerHSTF
{
publicpartialclassForm1:
Form
{
publicForm1()
{
InitializeComponent();
//不显示出dataGridView1的最后一行空白
dataGridView1.AllowUserToAddRows=false;
}
#region定义变量
#endregion
#region进入窗体即启动服务
privatevoidForm1_Load(objectsender,EventArgse)
{
//开启接收线程
ThreadTempThread=newThread(newThreadStart(this.StartReceive));
TempThread.Start();
}
#endregion
#region功能函数
privatevoidStartReceive()
{
//创建一个网络端点
IPEndPointipep=newIPEndPoint(IPAddress.Any,int.Parse("2005"));
//MessageBox.Show(IPAddress.Any);
//创建一个套接字
Socketserver=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//绑定套接字到端口
server.Bind(ipep);
//开始侦听(并堵塞该线程)
server.Listen(10);
//确认连接
Socketclient=server.Accept();
//获得客户端节点对象
IPEndPointclientep=(IPEndPoint)client.RemoteEndPoint;
//获得[文件名]
stringSendFileName=System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
//MessageBox.Show("文件名"+SendFileName);
//获得[包的大小]
stringbagSize=System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
//MessageBox.Show("包大小"+bagSize);
//获得[包的总数量]
intbagCount=int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)));
//MessageBox.Show("包的总数量"+bagCount);
//获得[最后一个包的大小]
stringbagLast=System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
//MessageBox.Show("最后一个包的大小"+bagLast);
//创建一个新文件
FileStreamMyFileStream=newFileStream(SendFileName,FileMode.Create,FileAccess.Write);
//已发送包的个数
intSendedCount=0;
while(true)
{
byte[]data=TransferFiles.ReceiveVarData(client);
if(data.Length==0)
{
break;
}
else
{
SendedCount++;
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data,0,data.Length);
//显示已发送包的个数
//MessageBox.Show("已发送包个数"+SendedCount.ToString());
}
}
//关闭文件流
MyFileStream.Close();
//关闭套接字
client.Close();
//填加到dgv里
//文件大小,IP,已发送包的个数,文件名,包的总量,最后一个包的大小
this.dataGridView1.Rows.Add(bagSize,clientep.Address,SendedCount,SendFileName,bagCount,bagLast);
//MessageBox.Show("文件接收完毕!
");
}
#endregion
#region拦截Windows消息,关闭窗体时执行
protectedoverridevoidWndProc(refMessagem)
{
constintWM_SYSCOMMAND=0x0112;
constintSC_CLOSE=0xF060;
if(m.Msg==WM_SYSCOMMAND&&(int)m.WParam==SC_CLOSE)
{//捕捉关闭窗体消息
//Userclickedclosebutton
//this.WindowState=FormWindowState.Minimized;//把右上角红叉关闭按钮变最小化
ServiceStop();
}
base.WndProc(refm);
}
#endregion
#region停止服务
//停止服务
privatevoidServiceStop()
{
try
{
}
catch{}
try
{
}
catch{}
}
#endregion
}
}
客户端用来发送文件,选择文件后点发送按钮发送文件
客户端代码:
C#代码
1.////////////////////////////////////////////////////////////////////////////////
2.//title:
点对点文件传输程序 //
3.////////////////////////////////////////////////////////////////////////////////
4.
5.//////////////////////////Begin-发送端//////////////////////////////////
6.using System;
7.using System.Drawing;
8.using System.Collections;
9.using System.ComponentModel;
10.using System.Windows.Forms;
11.using System.Data;
12.using System.IO;
13.using System.Net;
14.using System.Net.Sockets;
15.using System.Threading;
16.
17.namespace 发送端
18.{
19. ///
20. /// Form1 的摘要说明。
21. ///
22. public class Form1 :
System.Windows.Forms.Form
23. {
24. private System.Windows.Forms.GroupBox groupBox1;
25. private System.Windows.Forms.OpenFileDialog openFileDialog1;
26. private System.Windows.Forms.TextBox textBox1;
27. private System.Windows.Forms.Button button1;
28. private System.Windows.Forms.Label la
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# winform socket网络编程点对点传输文件socket文件传输监听端口 socket 网络 编程 点对点 传输 文件 文件传输 监听 端口
![提示](https://static.bdocx.com/images/bang_tan.gif)