using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace SocketServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button_Monitor_Click( 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(textBox_Port.Text));
socketWatch.Bind(point); //绑定端口号
ShowMsg(\"监听成功\");
socketWatch.Listen(10);
//创建监听线程
Thread thread = new Thread(Listen);
thread.IsBackground = true;
thread.Start(socketWatch);
}
catch { }
}
void ShowMsg(string strRecords)
{
listBox_Recv.Items.Add(strRecords + \"\\r\\n\");
}
/// <summary>
/// 等待客户端的连接,并且创建与之通信的Socket
/// </summary>
/// <param name=\"o\"></param>
Socket socketSend;
void Listen( 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( 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(DateTime.Now.ToString() + \"(客户端):\" + str);
}
}
catch { }
}
/// <summary>
/// 服务器向客户端发送消息
/// </summary>
/// <param name=\"str\"></param>
void Send(string str)
{
try
{
byte[] buffer = Encoding.UTF8.GetBytes(str);
socketSend.Send(buffer);
}
catch { }
}
private void Form1_Load( sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
private void textBox1_KeyDown( sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Send(textBox1.Text.Trim());
ShowMsg(DateTime.Now.ToString() + \"(服务器):\" + textBox1.Text);
textBox1.Clear();
}
}
}
}
继续阅读与本文标签相同的文章
上一篇 :
自定义圆形搜索框加shape
-
阿里云ECS突发性能t6实例1年仅需148元 上车拼团即享1.5折优惠!
2026-05-18栏目: 教程
-
Linux初级知识
2026-05-18栏目: 教程
-
短视频开发、小视频源码制作需要这些技术手段
2026-05-18栏目: 教程
-
企业官网怎么选择合适的阿里云服务器ECS配置及价格(新手参考)
2026-05-18栏目: 教程
-
专线网络与家庭宽带区别(基础篇)
2026-05-18栏目: 教程
