文章目录
1、创建WinForm应用程序
这里就不细说创建方法了,直接上创建完成的效果图吧
主入口两个按钮事件:
/// <summary>
/// 打开客户端
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_OpenClient_Click(object sender, EventArgs e)
{
SocketClient socketClient = new SocketClient();
socketClient.ShowDialog();
}
/// <summary>
/// 打开服务端
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_OpenService_Click(object sender, EventArgs e)
{
SocketService socketService = new SocketService();
socketService.ShowDialog();
}
2、服务端界面绘制
其中txt_MessageBox与txtSendBox属性Multiline=true
3、客户端界面绘制
4、服务端功能实现
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace Socket通信聊天室
{
public partial class SocketService : Form
{
public SocketService()
{
InitializeComponent();
//多线程编程中,如果子线程需要使用主线程中创建的对象和控件,最好在主线程中体现进行检查取消
CheckForIllegalCrossThreadCalls = false;
}
/// <summary>
/// 界面加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SocketService_Load(object sender, EventArgs e)
{
//获取Ip大概率位【0.0.0.0】表示任何IP
//在服务端连接的时候先查看本机Ipv4地址
var ip = IPAddress.Any.ToString();
this.txt_IpAddress.Text = ip;
}
/// <summary>
/// 创建一个字典,用来存储记录服务器与客户端之间的连接(线程问题)
/// </summary>
Dictionary<string, System.Net.Sockets.Socket> clientList = new Dictionary<string, System.Net.Sockets.Socket>();
private void btn_Create_Click