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

  • 相关阅读:
    UVA 10572 Black & White (状压DP)
    ZOJ 3466 The Hive II (插头DP,变形)
    POJ 3133 Manhattan Wiring (插头DP,轮廓线,经典)
    HDU 3377 Plan (插头DP,变形)
    HDU 1964 Pipes (插头DP,变形)
    FZU 1977 Pandora adventure (插头DP,常规)
    URAL 1519 Formula 1 (插头DP,常规)
    POJ 1739 Tony's Tour (插头DP,轮廓线DP)
    HDU 1693 Eat the Trees (插头DP)
    hihoCoder #1162 : 骨牌覆盖问题·三 (矩阵快速幂,DP)
  • 原文地址:https://www.cnblogs.com/luchaoit/p/4146254.html
Copyright © 2011-2022 走看看