基于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
基于socket的客户端和服务端聊天机器人的更多相关文章
- 基于socket的客户端和服务端聊天简单使用 附Demo
功能使用 服务端 分离一个不停接受客户端请求的线程 接受不客户端请求的线程中,再分离就收消息的线程 几大对象分别是 IPEndPoint IP终结点 服务端Socket,绑定终结点Bind,启动监听L ...
- 基于socket.io客户端与服务端的相互通讯
socket.io是对websocket的封装,用于客户端与服务端的相互通讯.官网:https://socket.io/. 下面是socket.io的用法: 1.由于使用express开的本地服务,先 ...
- c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP 入门级客户端与服务端交互代码 网 ...
- 实验09——java基于TCP实现客户端与服务端通信
TCP通信 需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手 底层通过 流 发送数据 数据没有大小限制 可靠的传输机制 - 丢包重发 包的顺序的 ...
- 用PHP的socket实现客户端到服务端的通信
服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...
- Python socket编程客户端与服务端通信
[本文出自天外归云的博客园] 目标:实现客户端与服务端的socket通信,消息传输. 客户端 客户端代码: from socket import socket,AF_INET,SOCK_STREAM ...
- Socket通信客户端和服务端代码
这两天研究了下Socket通信,简单实现的客户端和服务端代码 先上winfrom图片,客户端和服务端一样 服务端代码: using System; using System.Collections.G ...
- C# Winform 通过Socket实现客户端和服务端TCP通信
操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...
- 在Java中使用Socket模拟客户端和服务端(多线程)
1:Socket与ServerSocket的交互 2.Socket和ServerSocket介绍 Socket 构造函数 Socket() Socket(InetAddress address, in ...
随机推荐
- [Golang]Go Packages
---------------------------------------------------------------------------------------------------- ...
- Class diagrams
So far we have seen stack diagrams, which show the state of a program, and object diagrams, which sh ...
- 三味书屋 bbb
为学日益 ,为道日损 .损之又损,以至于无为
- Tasks、 activity 及 activity stack
一. Activity的四种加载模式 Activity之间的跳转,或者说加载一个新的Activity,一般对于开发者来说,都不是一个太难的问题.直到后来随着不断的深入,才发现原来Activity的加载 ...
- DuiLib通用窗口类WindowImplBase封装
.h头文件 class WindowImplBase : public CWindowWnd, public INotifyUI, public IMessageFilterUI, public ID ...
- 【MySQL】触发器学习
MySQL手册中对触发器的定义是: 触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象.表必须是永久性表,不能将触发程序与临时表与视图关联起来. 相同触发程序动作时间和事件的给定表 ...
- Handler 取不到session 解决办法
Handler需要继承 Handler : IHttpHandler, IReadOnlySessionState, IRequiresSessionState
- 【缓存】EF4ProviderWrappers
在Kooboo中使用了Entity Framework作为持久化框架,但由于EF1.0并没有提供完整缓存解决方案,一直以来都在为数据缓存而烦脑,在没有找到合适解决方案的情况下,采取了临时的解决办法:直 ...
- Linux:设置alias永久生效
登录数据库每次要输入密码,如:[root@localhost ~]# mysql -p123456 觉得麻烦... 简单的方法可以设置别名:alias mysql="mysql -p1234 ...
- 基于IIS的HTTP、FTP文件服务器搭建与性能测试
鉴于CAPI中文件操作是非常重要的一环,为了提高性能,直接提供下载地址供客户端下载: 1.基于IIS的HTTP文件服务器.FTP文件服务器(为了减少因编码造成的性能问题,尽量不要在文件服务器上写代码) ...