zoukankan      html  css  js  c++  java
  • C#Socket 案例

    服务器端

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    namespace wangluoqi
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //点击监听按钮时 创建Socket对像
                Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket对象,如果用UDP协议,则要用SocketTyype.Dgram类型的套接字
    
                //声明ip地址
                IPAddress ip = IPAddress.Any;
    
                //创建端口对像
                IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtprot.Text));
    
                //开始监听
                socketWatch.Bind(point);
                ShowMsg("监听成功");
                //声明一秒内可同时连接的客户端
                socketWatch.Listen(10);
    
    
                //创建后台进程用来监听连接
                Thread td = new Thread(listen);
                td.IsBackground = true;
                td.Start(socketWatch);
    
    
    
            }
            Socket socketSend;
            Dictionary<string, Socket> dc = new Dictionary<string, Socket>();
            /// <summary>
            /// 创建通信的客户端
            /// </summary>
            /// <param name="o"></param>
            void listen(object o)
            {
                //把对像转成socket 如果不为socket 返回null
                Socket socketwatch = o as Socket;
                while (true)
                {     //等待客户端连接 创建一个负责通信的Socket
                    socketSend = socketwatch.Accept();
                    dc.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
                    comboBox1.Items.Add(socketSend.RemoteEndPoint.ToString());
                    ShowMsg(socketSend.RemoteEndPoint.ToString() + ":连接成功");
    
                    //新建一个进程,以免程序假死
                    Thread th = new Thread(Receive);
                    th.IsBackground = true;
                    th.Start(socketSend);
    
    
                }
            }
    
            /// <summary>
            /// 不停的接收传过来的数据
            /// </summary>
            /// <param name="o"></param>
            void Receive(object o)
            {
                try
                {
                    while (true)
                    {
                        Socket socketSend = o as Socket;
    
                        byte[] buffer = new byte[1024 * 1024 * 2];
                        int r = socketSend.Receive(buffer);
                        if (r == 0)
                        {
                            break;
                        }
                        string str = Encoding.UTF8.GetString(buffer, 0, r);
                        ShowMsg(socketSend.RemoteEndPoint + ":" + str);
                    }
                }
                catch { }
            }
    
            private void ShowMsg(string str)
            {
                txtlog.AppendText(str + "
    ");
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //取消跨线层访问判断
                Control.CheckForIllegalCrossThreadCalls = false;
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                string str = txtsend.Text;
                byte[] buf = Encoding.UTF8.GetBytes(str);
                List<byte> blist = new List<byte>();
                blist.Add(0);
                blist.AddRange(buf);
                //将泛型集合转为数组
                byte[] nbuf = blist.ToArray();
                      
                if (comboBox1.SelectedItem == null)
                {
                    comboBox1.SelectedIndex = 0;
                }
                dc[comboBox1.SelectedItem.ToString()].Send(nbuf);
    
            //  socketSend.Send(buf);
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                OpenFileDialog odg = new OpenFileDialog();
                odg.InitialDirectory = @"C:UsersAdministratorDesktop";
                odg.ShowDialog();
    
                string filepath = odg.FileName;
                txtfilename.Text = filepath;
    
    
            }
    
            //发送文本
            private void button3_Click(object sender, EventArgs e)
            {
                string stpath = txtfilename.Text;
                if (comboBox1.SelectedItem == null)
                {
                    comboBox1.SelectedIndex = 0;
                }
                using(FileStream fsRead=new FileStream(stpath,FileMode.OpenOrCreate,FileAccess.Read))
                {
                    byte[] buf = new byte[1024 * 1024 * 5];
                    int r = fsRead.Read(buf, 0, buf.Length);
                    List<byte> nlist= new List<byte>();
                    nlist.Add(1);
                    nlist.AddRange(buf);
                    //将集合转为数组;
                    byte[] nbuf = nlist.ToArray();
                    dc[comboBox1.SelectedItem.ToString()].Send(nbuf, 0, r+1, SocketFlags.None);
                }
            }
    
            //发送窗口抖动
            private void button5_Click(object sender, EventArgs e)
            {
                if (comboBox1.SelectedItem == null)
                {
                    comboBox1.SelectedIndex = 0;
                }
                byte[] buf = new byte[1];
                buf[0] = 2;
                dc[comboBox1.SelectedItem.ToString()].Send(buf);
            }
        }
    }

    客户端

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace clent
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            Socket socketsend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //连接服务器
            private void button1_Click(object sender, EventArgs e)
            {
                //创建连接用的socket
    
    
                //创建连接点
                IPAddress ip = IPAddress.Parse(txtip.Text);
                //创建要连接的网络点
                IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtpint.Text));
    
                //连接
                socketsend.Connect(point);
                ShowMsg("连接成功");
    
                //创建一个后台线层,用于接收服务器发来的数据
                Thread td = new Thread(jssend);
                td.IsBackground = true;
                td.Start();
    
            }
    
            /// <summary>
            /// 接收数据
            /// </summary>
            void jssend()
            {
                try
                    {
                while (true)
                {
                    
                        byte[] buf = new byte[1024 * 1024 * 2];
                        //实际接收到的字符数
                        int r = socketsend.Receive(buf);
                        if (r == 0)
                        {
                            break;
                        }
                    //表示接收到的数据是文本
                        if (buf[0] == 0)
                        {
                            string str = Encoding.UTF8.GetString(buf, 1, r-1);
                            txtlog.AppendText(socketsend.RemoteEndPoint + ":" + str + "
    ");
                        }
                        else if (buf[0] == 1)//表示接收到的数据是文件
                        {
                            SaveFileDialog sdg = new SaveFileDialog();
                            sdg.InitialDirectory = @"C:UsersAdministratorDesktop";
                            sdg.Title = "选择保存位置";                       
                            sdg.ShowDialog(this);//此处一定要添加this
    
                            string filename = sdg.FileName;
                            using (FileStream fsw = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                            {
                                fsw.Write(buf, 1, r - 1);
                            }
                            MessageBox.Show("保存成功");
    
                        }
                        else if (buf[0] == 2)//表示接收到的数据是窗口抖动
                        {
                            int x = this.Location.X;
                            int y = this.Location.Y;
                            for (int i = 0; i < 100; i++)
                            {
                                this.Location = new Point(x - 10, y - 10);
                                this.Location = new Point(x, y);
                                
                            }
                        }
                       
    
                       
                    }
                }
                catch{}
            }
    
    
            void ShowMsg(string str)
            {
                txtlog.AppendText(str + "
    ");
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                byte[] buf = Encoding.UTF8.GetBytes(txtsend.Text);
                socketsend.Send(buf);
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                Control.CheckForIllegalCrossThreadCalls = false;
            }
        }
    }

     实例下载

  • 相关阅读:
    linux三剑客之grep
    MySQL练习(1)
    appium获取toast方法
    Could not parse UiSelector argument: 'XXX' is not a string 错误解决办法
    基于python的几种排序算法的实现
    生成allure测试报告之后,服务器端口无法访问查看生成的report,可能是这样引起的。
    通过源码看原理之 selenium
    如何查看浏览器记住的密码
    传智播客JavaWeb day09-mysql入门、数据库操作、数据库表操作、数据行操作
    SQLServer数据库表架构和数据保存成sql文件
  • 原文地址:https://www.cnblogs.com/zywf/p/4542128.html
Copyright © 2011-2022 走看看