zoukankan      html  css  js  c++  java
  • 基于socket的客户端和服务端聊天机器人

    服务端代码如下:

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;

    namespace Client
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    //对 Windows 窗体控件进行线程安全调用
    RichTextBox.CheckForIllegalCrossThreadCalls = false;
    }
    private Socket serverSocket;
    /// <summary>
    /// 服务端开启监听
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button2_Click(object sender, EventArgs e)
    {
    int port = 6000;
    string host = "127.0.0.1";
    IPAddress ip = IPAddress.Parse(host);
    IPEndPoint ipe = new IPEndPoint(ip, port);
    Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    sSocket.Bind(ipe);
    sSocket.Listen(100);
    ParameterizedThreadStart par = ServerListenMethod;
    Thread thread = new Thread(par);
    thread.Start(sSocket);
    }
    public void ServerListenMethod(object sSocket)
    {
    while (true)
    {
    Socket serSocket = ((Socket)sSocket).Accept();
    ParameterizedThreadStart p = ServerCommunicationMethod;
    Thread t = new Thread(p);
    t.Start(serSocket);
    }
    }
    public void ServerCommunicationMethod(object sSocket)
    {
    serverSocket = (Socket)sSocket;
    string recStr = "";

    //创建内存缓存区
    byte[] recByte = new byte[1024 * 1024 * 5];
    while (true)
    {
    int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
    recStr = Encoding.Default.GetString(recByte, 0, bytes);
    this.richTextBox1.AppendText("服务器端获得信息:" + recStr);
    }
    }
    /// <summary>
    /// 服务端发送消息
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button1_Click(object sender, EventArgs e)
    {
    var str = this.textBox1.Text;
    this.textBox1.Text = "";
    byte[] sendByte = Encoding.Default.GetBytes(str);
    serverSocket.Send(sendByte, sendByte.Length, 0);
    this.richTextBox1.AppendText("服务器端发送信息:" + str);
    }
    }
    }

    服务端启动如图:

    ----------------------------------------------------------------------------------------------------------------------

    客户端代码如下

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using System.Windows.Forms;

    namespace Servers
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    //对 Windows 窗体控件进行线程安全调用
    RichTextBox.CheckForIllegalCrossThreadCalls = false;
    }
    private Socket clientSocket;
    /// <summary>
    /// 客户端发送消息
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void BtnMsg_Click(object sender, EventArgs e)
    {
    var str = this.textBox1.Text;
    clientSocket.Send(Encoding.Default.GetBytes(str));
    this.richTextBox1.AppendText("客户端发送信息:" + str);
    this.textBox1.Text = "";
    }
    /// <summary>
    /// 建立连接
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button1_Click(object sender, EventArgs e)
    {
    int port = 6000;
    string host = "127.0.0.1";
    IPAddress ip = IPAddress.Parse(host);
    IPEndPoint ipe = new IPEndPoint(ip, port);
    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    clientSocket.Connect(ipe);
    ThreadStart start = ClientListenMethod;
    Thread t = new Thread(start);
    t.Start();
    }
    public void ClientListenMethod()
    {

    //创建内存缓存区
    byte[] recByte = new byte[1024 * 1024 * 5];
    while (true)
    {
    int bytes = clientSocket.Receive(recByte, recByte.Length, 0);
    string recStr = Encoding.Default.GetString(recByte, 0, bytes);
    this.richTextBox1.AppendText("客户端端获得信息:" + recStr);
    }
    }
    }
    }

    客户端启动如图:

    注:如果需要项目源代码,可以发1870902607@qq.com邮箱告诉我,我会将项目源代码发给你。

    ----分享不仅帮助了别人,同时也提升了自己。luchao_it

  • 相关阅读:
    利用 Python 写一个颜值测试小工具
    手敲代码太繁琐?“拖拉拽”式Python编程惊艳到我了
    一道 3 行代码的 Python面试题,我懵逼了一天
    这几个冷门却实用的 Python 库,我爱了!
    如何利用Python在网上接单,兼职也能月薪过万
    薪资高,福利好,会Python的人就是这么豪横!
    js_事件——鼠标滚轮事件
    CSS3_浮动造成的的li反向排列
    CSS3_-webkit-font-smoothing字体抗锯齿渲染
    解决a标签下的image元素下方的空白
  • 原文地址:https://www.cnblogs.com/luchaoit/p/4146254.html
Copyright © 2011-2022 走看看