http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3248|回复: 2

[Winform] 帮我看下为什么不能发送

[复制链接]
发表于 2013-4-9 12:35:30 | 显示全部楼层 |阅读模式
[code=csharp]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Data.SqlClient;
using System.Threading;
using System.Collections;

namespace Aserver
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            TextBox.CheckForIllegalCrossThreadCalls = false;
        }
        Thread threadWatch = null; //负责监听客户端的线程   
        Socket socketWatch = null; //负责监听客户端的套接字   
        Socket socConnection = null;

        string filePath = null;
        string fileName = null;

        private void Form1_Load(object sender, EventArgs e)
        {
            //定义一个套接字用于监听客户端发来的信息  包含3个参数(IP4寻址协议,流式连接,TCP协议)   
            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //服务端发送信息 需要1个IP地址和端口号   
           // System.Net.IPAddress addr;
            // 获得本机局域网IP地址   
            IPAddress ipaddress = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);

            // IPAddress ipaddress = IPAddress.Parse(txtIP.Text.Trim()); //获取文本框输入的IP地址   
            //将IP地址和端口号绑定到网络节点endpoint上   
            IPEndPoint endpoint = new IPEndPoint(ipaddress, 2112); //获取文本框上输入的端口号   
            //监听绑定的网络节点   
            socketWatch.Bind(endpoint);
            //将套接字的监听队列长度限制为20   
            socketWatch.Listen(20);
            //创建一个监听线程   
            threadWatch = new Thread(WatchConnecting);
            //将窗体线程设置为与后台同步   
            threadWatch.IsBackground = true;
            //启动线程   
            threadWatch.Start();
            //启动线程后 txtMsg文本框显示相应提示   
            txtMsg.AppendText("开始监听客户端传来的信息!" + "\r\n");   
        }

        private void WatchConnecting()
        {
            while (true)  //持续不断监听客户端发来的请求   
            {
                try
                {
                    socConnection = socketWatch.Accept();
                }
                catch (Exception ex)
                {
                    txtMsg.AppendText(ex.Message); //提示套接字监听异常
                    break;
                }
                txtMsg.AppendText("客户端连接成功,两端可以开始通信了...\r\n");
                //创建通信线程
                ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);
                Thread thr = new Thread(pts);
                thr.IsBackground = true;
                //启动线程
                thr.Start(socConnection);
            }
        }

        private void btnSendImages_Click(object sender, EventArgs e)
        {
           
            SendFile(filePath);
        }
        //byte a[6]={0x7E,0x7E,0x00,0x01,0x7F,0x7F};
      
      
        
        private void ServerRecMsg(object socketClientPara)
        {

            Socket socketServer = socketClientPara as Socket;
           
            
            while (true)
            {
               
                //创建一个内存缓冲区 其大小为1024*1024字节  即1M  
                byte[] arrServerRecMsg = new byte[1024 * 1024];
                //将接收到的信息存入到内存缓冲区,并返回其字节数组的长度  
                int length = socketServer.Receive(arrServerRecMsg);
               
            
               
            }  
        }
     

        private DateTime GetCurrentTime()
        {
            DateTime currentTime = new DateTime();
            currentTime = DateTime.Now;
            return currentTime;
        }

        private void btnSelectFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofDialog = new OpenFileDialog();
            if (ofDialog.ShowDialog(this) == DialogResult.OK)
            {
                fileName = ofDialog.SafeFileName;
                textFileName.Text = fileName;
                filePath = ofDialog.FileName;
            }
        }
   
        private void SendFile(string fileFullPath)
        {
        
            string relativePath = @"d:\a\点菜.bmp";
            OpenFileDialog ofDialog = new OpenFileDialog();
            ofDialog.FileName = relativePath;
            fileFullPath = ofDialog.FileName;
            
            if (fileFullPath == null)
            {
                MessageBox.Show("请选择要发送的文件");
                return;
            }
            else if (fileFullPath != null)
            {

                byte[] arrClientFile = new byte[1024 * 1024 * 10];
                int i;
                if ((i = socConnection.Receive(arrClientFile)) != 0)
                {
            

                    string path = Encoding.UTF8.GetString(arrClientFile, 0, i).Trim();

                    FileStream fs = new FileStream(path, FileMode.Open);
                    int PacketSize = 1024;
                    int PacketCount = (int)(fs.Length / ((long)PacketSize));

                    int LastDataPacket = (int)(fs.Length- ((long)(PacketSize * PacketCount)));


                    byte[] data = new byte[PacketSize];
                    for (int x = 0; x < PacketCount; x++)
                    {
                        fs.Read(data, 0, data.Length);
                        CommonModule.SendVarData(socConnection, data);
                    }
                    if (LastDataPacket != 0)
                    {
                        data = new byte[LastDataPacket];
                        fs.Read(data, 0, data.Length);
                        CommonModule.SendVarData(socConnection, data);
                    }
                    socConnection.Close();
                    fs.Close();
                }

            }
         
        }
      
    }
}[/code]


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-4-9 13:08:01 | 显示全部楼层
不使用线程看看能不能发送
 楼主| 发表于 2013-4-9 14:02:16 | 显示全部楼层
[code=csharp]现在可以了  可是发一次就断开连接了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Data.SqlClient;
using System.Threading;
using System.Collections;

namespace Aserver
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            TextBox.CheckForIllegalCrossThreadCalls = false;
        }
        Thread threadWatch = null; //负责监听客户端的线程   
        Socket socketWatch = null; //负责监听客户端的套接字   
        Socket socConnection = null;

        string filePath = null;
        string fileName = null;

        private void Form1_Load(object sender, EventArgs e)
        {
            //定义一个套接字用于监听客户端发来的信息  包含3个参数(IP4寻址协议,流式连接,TCP协议)   
            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //服务端发送信息 需要1个IP地址和端口号   
           // System.Net.IPAddress addr;
            // 获得本机局域网IP地址   
            IPAddress ipaddress = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);

            // IPAddress ipaddress = IPAddress.Parse(txtIP.Text.Trim()); //获取文本框输入的IP地址   
            //将IP地址和端口号绑定到网络节点endpoint上   
            IPEndPoint endpoint = new IPEndPoint(ipaddress, 2112); //获取文本框上输入的端口号   
            //监听绑定的网络节点   
            socketWatch.Bind(endpoint);
            //将套接字的监听队列长度限制为20   
            socketWatch.Listen(20);
            //创建一个监听线程   
            threadWatch = new Thread(WatchConnecting);
            //将窗体线程设置为与后台同步   
            threadWatch.IsBackground = true;
            //启动线程   
            threadWatch.Start();
            //启动线程后 txtMsg文本框显示相应提示   
            txtMsg.AppendText("开始监听客户端传来的信息!" + "\r\n");   
        }

        private void WatchConnecting()
        {
            while (true)  //持续不断监听客户端发来的请求   
            {
                try
                {
                    socConnection = socketWatch.Accept();
                }
                catch (Exception ex)
                {
                    txtMsg.AppendText(ex.Message); //提示套接字监听异常
                    break;
                }
                txtMsg.AppendText("客户端连接成功,两端可以开始通信了...\r\n");
                //创建通信线程
                ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);
                Thread thr = new Thread(pts);
                thr.IsBackground = true;
                //启动线程
                thr.Start(socConnection);
            }
        }

        private void btnSendImages_Click(object sender, EventArgs e)
        {

        }
        //byte a[6]={0x7E,0x7E,0x00,0x01,0x7F,0x7F};
      
      
        
        private void ServerRecMsg(object socketClientPara)
        {

            Socket socketServer = socketClientPara as Socket;
           
            
            while (true)
            {
               
                //创建一个内存缓冲区 其大小为1024*1024字节  即1M  
                byte[] arrServerRecMsg = new byte[1024 * 1024 * 10];
                //将接收到的信息存入到内存缓冲区,并返回其字节数组的长度  
                //int length = socketServer.Receive(arrServerRecMsg);
               

            
               
            }  
        }


        private DateTime GetCurrentTime()
        {
            DateTime currentTime = new DateTime();
            currentTime = DateTime.Now;
            return currentTime;
        }

        private void btnSelectFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofDialog = new OpenFileDialog();
            if (ofDialog.ShowDialog(this) == DialogResult.OK)
            {
                fileName = ofDialog.SafeFileName;
                textFileName.Text = fileName;
                filePath = ofDialog.FileName;
            }
        }
   
        private void SendFile(string fileFullPath)
        {

         
            string relativePath = @"d:\a\点菜.bmp";
            OpenFileDialog ofDialog = new OpenFileDialog();
            ofDialog.FileName = relativePath;
            fileFullPath = ofDialog.FileName;
            
            if (fileFullPath == null)
            {
                MessageBox.Show("请选择要发送的文件");
                return;
            }
            else if (fileFullPath != null)
            {
               


                    //string path = Encoding.UTF8.GetString(arrClientFile, 0, i).Trim();

                    FileStream fs = new FileStream(fileFullPath, FileMode.Open);
                    int PacketSize = 1024;
                    int PacketCount = (int)(fs.Length / ((long)PacketSize));

                    int LastDataPacket = (int)(fs.Length- ((long)(PacketSize * PacketCount)));



                    byte[] data = new byte[PacketSize];
                    for (int x = 0; x < PacketCount; x++)
                    {
                        fs.Read(data, 0, data.Length);
                        CommonModule.SendVarData(socConnection, data);
                    }
                    if (LastDataPacket != 0)
                    {
                        data = new byte[LastDataPacket];
                        fs.Read(data, 0, data.Length);
                        CommonModule.SendVarData(socConnection, data);
                    }
                    socConnection.Close();
                    fs.Close();
                }

            }
         
        }
      
    }
}[/code]
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-15 19:58

© 2014-2021

快速回复 返回顶部 返回列表