zoukankan      html  css  js  c++  java
  • Socket通信例子

    Server端

    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;
    
    namespace ServerTest
    {
        public partial class FrmServer : Form
        {
            public FrmServer()
            {
                InitializeComponent();
            }
    
            private void btnlisten_Click(object sender, EventArgs e)
            {
                try
                {
                    //点击开始监听时 在服务端创建一个负责监听IP和端口号的Socket
                    Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    IPAddress ip = IPAddress.Any;
                    //创建对象端口
                    IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtport.Text));
    
                    socketWatch.Bind(point);//绑定端口号
                    ShowMsg("监听成功!");
                    socketWatch.Listen(10);//设置监听
    
                    //创建监听线程
                    Thread thread = new Thread(Listen);
                    thread.IsBackground = true;
                    thread.Start(socketWatch);
                }
                catch { }
            }
            /// <summary>
            /// 等待客户端的连接 并且创建与之通信的Socket
            /// </summary>
            Socket socketSend;
            void Listen(object o)
            {
                try
                {
                    Socket socketWatch = o as Socket;
                    while (true)
                    {
                        socketSend = socketWatch.Accept();//等待接收客户端连接
                        ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功!");
                        //开启一个新线程,执行接收消息方法
                        Thread r_thread = new Thread(Received);
                        r_thread.IsBackground = true;
                        r_thread.Start(socketSend);
                    }
                }
                catch { }
            }
            /// <summary>
            /// 服务器端不停的接收客户端发来的消息
            /// </summary>
            /// <param name="o"></param>
            void Received(object o)
            {
                try
                {
                    Socket socketSend = o as Socket;
                    while (true)
                    {
                        //客户端连接服务器成功后,服务器接收客户端发送的消息
                        byte[] buffer = new byte[1024 * 1024 * 3];
                        //实际接收到的有效字节数
                        int len = socketSend.Receive(buffer);
                        if (len == 0)
                        {
                            break;
                        }
                        string str = Encoding.UTF8.GetString(buffer, 0, len);
                        ShowMsg(socketSend.RemoteEndPoint + ":" + str);
                    }
                }
                catch { }
            }
            /// <summary>
            /// 服务器向客户端发送消息
            /// </summary>
            /// <param name="str"></param>
            void Send(string str)
            {
                byte[] buffer = Encoding.UTF8.GetBytes(str);
                socketSend.Send(buffer);
            }
    
            void ShowMsg(string msg)
            {
                listBox1.Items.Add(msg + "
    ");
            }
    
    
            private void btnsend_Click(object sender, EventArgs e)
            {
                Send(textBox2.Text.Trim());
            }
    
            private void FrmServer_Load(object sender, EventArgs e)
            {
                Control.CheckForIllegalCrossThreadCalls = false;
            }
        }
    }

    Client

    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;
    
    namespace ClintTest
    {
        public partial class FrmClint : Form
        {
            public FrmClint()
            {
                InitializeComponent();
            }
            Socket socketSend;
            private void btnsend_Click(object sender, EventArgs e)
            {
                try
                {
                    string msg = txtmsg.Text.Trim();
                    byte[] buffer = new byte[1024 * 1024 * 3];
                    buffer = Encoding.UTF8.GetBytes(msg);
                    socketSend.Send(buffer);
                }
                catch { }
            }
    
            private void btnconnect_Click(object sender, EventArgs e)
            {
                try
                {
                    //创建客户端Socket,获得远程ip和端口号
                    socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    IPAddress ip = IPAddress.Parse(txtip.Text);
                    IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtport.Text));
    
                    socketSend.Connect(point);
                    ShowMsg("连接成功!");
                    //开启新的线程,不停的接收服务器发来的消息
                    Thread c_thread = new Thread(Received);
                    c_thread.IsBackground = true;
                    c_thread.Start();
                }
                catch (Exception)
                {
                    ShowMsg("IP或者端口号错误...");
                }
            }
            void ShowMsg(string str)
            {
                listBox1.BeginInvoke(
                    new Action(delegate
                    {
                        listBox1.Items.Add(str + "
    ");
                        //Thread th = new Thread(Search);
                        //th.IsBackground = true;
                        //th.Priority = ThreadPriority.Lowest;
                        //th.Start();
    
                    })
                    );
               
            }
            void AddMsg()
            {
    
            }
            /// <summary>
            /// 接收服务端返回的消息
            /// </summary>
            void Received()
            {
                while (true)
                {
                    try
                    {
                        byte[] buffer = new byte[1024 * 1024 * 3];
                        //实际接收到的有效字节数
                        int len = socketSend.Receive(buffer);
                        if (len == 0)
                        {
                            break;
                        }
                        string str = Encoding.UTF8.GetString(buffer, 0, len);
                        ShowMsg(socketSend.RemoteEndPoint + ":" + str);
                    }
                    catch { }
                }
            }
    
            private void FrmClint_Load(object sender, EventArgs e)
            {
                Control.CheckForIllegalCrossThreadCalls = false;
            }
        }
    }

    萌橙 你瞅啥?
  • 相关阅读:
    kubernetes 【版本】
    【pod无法删除 总是处于terminate状态】强行删除pod
    prometheus数据格式
    【prometheus 抓取源】
    【PromQL】prometheus查询语言
    【grafana报错】Singlestat "Error: Multiple Series Error"
    【prometheus抓取间隔】scrape_interval
    【分布式一致性】etcd
    【kubectl 原理】kubectl 命令执行的时候究竟发生了什么(kubectl、apiserver、etcd)
    中国移动DNS IP地址大全(32个省)
  • 原文地址:https://www.cnblogs.com/daimaxuejia/p/10308994.html
Copyright © 2011-2022 走看看