发送端部分代码:
public void startSendFileThread() {
try
{
Thread sendFileThread = new Thread(new ThreadStart(sendFile));
sendFileThread.Start();
}
catch {
MessageBox.Show("线程开启或线程发送过中遇到问题失败。。。。。。");
this.sendFlag = false;
}
finally
{
}
}
public void sendFile()
{
public Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(userIP),userPort);
try
{
//因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。
socketClient.SendBufferSize = 1024 * 1024*10;
socketClient.ReceiveBufferSize = 1024 * 1024*10;
socketClient.Connect(ipep);
// MessageBox.Show("connected!!");
}
catch (SocketException e)
{
Console.WriteLine("unable to connect to server");
Console.WriteLine(e.ToString());
}
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
int partSize = 1024 * 100;
long fileLength = fs.Length;
long offset = 0;
while (true)
{
if (offset + partSize >=fileLength)
partSize = Convert.ToInt32(fileLength - offset);
byte[] temp = new byte[partSize];
fs.Position = offset;
fs.Read(temp, 0, partSize);
socketClient.Send(temp, temp.Length, SocketFlags.None);//将数据发送到指定的终结点
// myControl.TraFransfersSize += partSize;
if (offset + partSize >= fileLength)
break;
offset += partSize;
}
//myChat.Rich_Out.AppendText("发送完成: " + fileName + "\n");
socketClient.Shutdown( SocketShutdown.Both);
socketClient.Close();
// myChat.RemoveFileInfoFromControl(fileName);
}
接收端部分代码:
public void Listener() //监听 本地端口 5421
{
if (classTCPSocket == null)
classTCPSocket = new ClassTCPSocket(5421);
else
{
try
{
thdUdp = new Thread(new ThreadStart(GetUDPData)); //创建一个线程
thdUdp.Start(); //执行当前线程
}
catch (Exception e)
{
MessageBox.Show(e.ToString()); //显示线程的错误信息
}
}
}
public void GetUDPData() //获取当前接收的消息
{
serverSocket = classTCPSocket.getTCPSocker().Accept();//等到一个TCPSocker
byte[] Data =null;
int number = 0;
bool flag = true;
while (flag)
{
Data = new byte[1024 * 10];
if ((number = serverSocket.Receive(Data)) != 0)
{
FileStream fs = null;
try
{
fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite,FileShare.ReadWrite);// File.OpenWrite(filePath);
fs.Seek(0, SeekOrigin.End);//将该流的当前位值设为0
fs.Write(Data, 0, number);//向文件中写入当前接收的信息
// myControl.TraFransfersSize += number;
}
finally
{
fs.Close();
}
}
else flag=false;
}
// myChat.Rich_Out.AppendText("接收成功: " + fileName + "\n文件大小:"+GetText(myControl.TraFransfersSize)+"\n");
DoCleanOperation();
}
public void DoCleanOperation(){
if (serverSocket.Connected)
{
serverSocket.Shutdown(SocketShutdown.Both);
serverSocket.Close();
}
classTCPSocket.Active = false;
// myChat.RemoveFileInfoFromControl(fileName);// panelSendFile.Controls.Remove(myControl);
thdUdp.Abort();
}
//ClassTCPSocket
类
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Windows.Forms;
using System.Threading;
namespace QQClient
{
public class ClassTCPSocket
{
Socket tcpSocket = null;
private int localPort = 5421;
public int LocalPort
{
get { return localPort; }
set { localPort = value; }
}
public ClassTCPSocket(int localPort) {
this.localPort = localPort;
init();
}
private string localHost = "127.0.0.1";
public string LocalHost
{
get { return localHost; }
set { localHost = value; }
}
private bool active = false;
public bool Active
{
get { return active; }
set //该属性读取值
{
active = value;
if (tcpSocket == null)
init();
if (active)
{
openListen();
}
else
stopListen();
}
}
public void init(){
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(ClassGetLocalInfo.getLocalhostIP()), localPort);//定义一网络端点,将本地IP地址和端口号以网络端点存储
tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//定义一个Socket
tcpSocket.Bind(ipep);//Socket与本地的一个终结点相关联
}
public void openListen() {
if (this.tcpSocket != null)
{
tcpSocket.Listen(10);
//MessageBox.Show(tcpSocket.AddressFamily+":"+tcpSocket.LocalEndPoint);
}
else
{
init();
tcpSocket.Listen(10);
}
}
public void stopSocket() {
if (this.tcpSocket != null)
{
tcpSocket.Shutdown(SocketShutdown.Both);
tcpSocket.Close();
}
}
public void stopListen() {
if (this.tcpSocket != null && this.tcpSocket.Connected)
{
tcpSocket.Shutdown(SocketShutdown.Both);
}
}
public Socket getTCPSocker(){
return tcpSocket;
}
}
}
分享到:
相关推荐
C#超大文件发送与接收代码。用于开发超大文件的发送与接收
C#发送和接收文件示例,socket分块传输,支持断点续传。
C#使用socket发送(接收)文件的程序,任何文件均可。 其中SingleSendForm是一次发送一个文件,MultiSendForm可以一次选择多个文件,然后依次发送。
c#利用TcpClient发送与接收文件源码。
本代码包括:服务器和客户端两个部分,启动服务器后,客户端与服务器建立连接,然后,就可以互相传送文件。
C# Socket 发送接收文件,消息 互发消息,服务器下发文件
用C#接收和发送文件,支持大文件传输。这是我在国外网站下载的。
C#利用开源控件InTheHand.Net.Personal.dll制作的完整配对,发送及接收文件,可以连接手机也可以连接电脑。
c# 串口发送数据c# 串口发送数据c# 串口发送数据c# 串口发送数据
C#实现串口发送接收数据,有简单的版本和基于协议的两种版本,完整项目文件和详细注释
本人是根据他人网页的代码在C#桌面程序中实现了UDP的接收发送,实现的方式是P2P方式,因此寻求广播方式、一对多方式就不用下载了,代码简单易懂,有点基础就可以看懂并应用,里面是接收发送一起完成。亲测可用,VS...
网站编写代码,asp架构下用c#实现文件的发送和接收功能
C#微信企业号接收和发送消息
C#利用windows的API发送和接收消息Demo, 实现一个两个程序之间消息的通信,一个发送,另一个程序自动接收。 本代码测试全通过 .
C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 C# Socket通信(winform) 异步发送消息,服务端客户端通信,可以发送消息和文件并进行接收,代码注释详细 ...
使用c#可以发送、接受文件,连个文件可以再不同机器上使用
主要介绍了C#使用Socket实现发送和接收图片的方法,涉及C#操作socket发送与接收文件的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
C# USB数据接收与发送,可以作参考学习之用。
C#TCP发送消息和传输文件,学习网络编程的可以看一下
C#socket 大文件传输 分段传输 C#DEMO